หน้ารันไทม์และหน้าเหตุการณ์ของแอปมีหน้าที่จัดการวงจรของแอป รันไทม์ของแอปจะจัดการการติดตั้งแอป ควบคุมหน้ากิจกรรม และสามารถปิดแอปได้ทุกเมื่อ หน้าเหตุการณ์จะคอยฟังเหตุการณ์จากรันไทม์ของแอป รวมถึงจัดการว่าจะเปิดแอปใดและอย่างไร
วิธีการทำงานของวงจร
รันไทม์ของแอปจะโหลดหน้าเหตุการณ์จากเดสก์ท็อปของผู้ใช้และเหตุการณ์ onLaunch()
จะเริ่มทำงาน เหตุการณ์นี้จะบอกหน้ากิจกรรมว่าต้องเปิดหน้าต่างใดและมีขนาดเท่าใด
เมื่อหน้าเหตุการณ์ไม่มี JavaScript ที่กำลังทำงาน ไม่มีโค้ดเรียกกลับที่รอดำเนินการ และไม่มีหน้าต่างที่เปิดอยู่ รันไทม์จะยกเลิกการโหลดหน้าเหตุการณ์และปิดแอป เหตุการณ์ onSuspend()
จะเริ่มทำงานก่อนยกเลิกการโหลดหน้าเหตุการณ์ ซึ่งทำให้หน้ากิจกรรมทำงานทำความสะอาดง่ายๆ ได้ก่อนที่แอปจะปิดลง
สร้างหน้าและหน้าต่างกิจกรรม
แอปทั้งหมดต้องมีหน้ากิจกรรม หน้านี้มีตรรกะระดับบนสุดของแอปพลิเคชันโดยไม่มี UI ของตนเองและมีหน้าที่สร้างหน้าต่างสำหรับหน้าแอปอื่นๆ ทั้งหมด
สร้างหน้ากิจกรรม
หากต้องการสร้างหน้าเหตุการณ์ ให้ใส่ช่อง "พื้นหลัง" ในไฟล์ Manifest ของแอปและใส่ background.js
ไว้ในอาร์เรย์สคริปต์ สคริปต์ไลบรารีที่ใช้โดยหน้ากิจกรรมจะต้องเพิ่มลงในช่อง "พื้นหลัง" ก่อน ดังนี้
"background": {
"scripts": [
"foo.js",
"background.js"
]
}
หน้ากิจกรรมต้องมีฟังก์ชัน onLaunched()
ระบบจะเรียกใช้ฟังก์ชันนี้เมื่อมีการ
เปิดแอปพลิเคชันในลักษณะใดลักษณะหนึ่งต่อไปนี้
chrome.app.runtime.onLaunched.addListener(function() {
// Tell your app what to launch and how.
});
สร้างหน้าต่าง
หน้ากิจกรรมสามารถสร้างกรอบเวลาได้มากกว่า 1 ช่วงตามที่เห็นสมควร โดยค่าเริ่มต้น ระบบจะสร้างหน้าต่างเหล่านี้ด้วยการเชื่อมต่อสคริปต์กับหน้ากิจกรรม และในหน้ากิจกรรมจะสามารถเขียนสคริปต์ได้โดยตรง
Windows ในแอป Chrome ไม่เกี่ยวข้องกับหน้าต่างเบราว์เซอร์ Chrome โดยมีเฟรมที่เลือกได้ พร้อมแถบชื่อและการควบคุมขนาด และรหัสหน้าต่างที่แนะนำ Windows ที่ไม่มีรหัสจะไม่คืนค่าเป็นขนาดและตำแหน่งหลังจากรีสตาร์ท
ต่อไปนี้คือตัวอย่างหน้าต่างที่สร้างจาก background.js
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('main.html', {
id: 'MyWindowID',
bounds: {
width: 800,
height: 600,
left: 100,
top: 100
},
minWidth: 800,
minHeight: 600
});
});
รวมถึงข้อมูลการเปิดตัว
คุณอาจต้องจัดการข้อมูลการเปิดตัวในหน้ากิจกรรม ทั้งนี้ขึ้นอยู่กับวิธีเปิดแอปของคุณ โดยค่าเริ่มต้น จะไม่มีข้อมูลการเปิดใช้เมื่อเริ่มต้นแอปโดยตัวเปิดแอป สำหรับแอปที่มีตัวแฮนเดิลไฟล์ คุณต้องจัดการพารามิเตอร์ launchData.items
เพื่อให้สามารถเรียกใช้ตัวแฮนเดิลด้วยไฟล์ได้
กำลังฟังเหตุการณ์รันไทม์ของแอป
รันไทม์ของแอปจะควบคุมการติดตั้งแอป การอัปเดต และการถอนการติดตั้ง คุณไม่ต้องดำเนินการใดๆ เพื่อตั้งค่ารันไทม์ของแอป แต่หน้ากิจกรรมจะฟังเหตุการณ์ onInstalled()
เพื่อจัดเก็บการตั้งค่าในเครื่อง และใช้เหตุการณ์ onSuspend()
เพื่อล้างข้อมูลทั่วไปก่อนยกเลิกการโหลดหน้ากิจกรรมได้
กำลังจัดเก็บการตั้งค่าภายในเครื่อง
ระบบจะเรียกใช้ chrome.runtime.onInstalled()
เมื่อติดตั้งแอปครั้งแรกหรือเมื่ออัปเดตแอป เมื่อใดก็ตามที่มีการเรียกฟังก์ชันนี้ เหตุการณ์ onInstalled
จะเริ่มทำงาน หน้ากิจกรรมจะรับฟังเหตุการณ์นี้ได้และใช้ Storage API เพื่อจัดเก็บและอัปเดตการตั้งค่าในเครื่อง (โปรดดูตัวเลือกพื้นที่เก็บข้อมูลเพิ่มเติม)
chrome.runtime.onInstalled.addListener(function() {
chrome.storage.local.set(object items, function callback);
});
การป้องกันข้อมูลสูญหาย
ผู้ใช้จะถอนการติดตั้งแอปของคุณได้ทุกเมื่อ เมื่อถอนการติดตั้งแล้ว จะไม่มีโค้ดปฏิบัติการหรือข้อมูลส่วนตัวเหลืออยู่ ซึ่งอาจทำให้ข้อมูลสูญหาย เนื่องจากผู้ใช้อาจกำลังถอนการติดตั้งแอปที่มีการแก้ไขข้อมูลในเครื่องและไม่ซิงค์ข้อมูล คุณควรซ่อนข้อมูลไว้เพื่อป้องกันไม่ให้ข้อมูลสูญหาย
อย่างน้อยที่สุดก็ควรจัดเก็บการตั้งค่าของผู้ใช้ไว้ เพื่อที่ว่าหากผู้ใช้ติดตั้งแอปอีกครั้ง ข้อมูลเหล่านั้นก็จะยังสามารถใช้ซ้ำได้ เมื่อใช้ Storage API (storage.sync) ระบบจะซิงค์ข้อมูลผู้ใช้กับการซิงค์ของ Chrome โดยอัตโนมัติได้
ล้างข้อมูลก่อนปิดแอป
รันไทม์ของแอปจะส่งเหตุการณ์ onSuspend()
ไปยังหน้าเหตุการณ์ก่อนที่จะยกเลิกการโหลด หน้ากิจกรรมจะสามารถรอฟังกิจกรรมนี้ รวมถึงล้างข้อมูลและบันทึกสถานะก่อนที่แอปจะปิดได้
เมื่อเหตุการณ์นี้เริ่มทำงานแล้ว รันไทม์ของแอปจะเริ่มต้นกระบวนการปิดแอป หากแอปเปิดหน้าต่างอยู่ ระบบอาจรีสตาร์ทแอปในอนาคตผ่านเหตุการณ์ onRestarted
ในกรณีนี้ แอปควรบันทึกสถานะปัจจุบันของแอปลงในพื้นที่เก็บข้อมูลถาวรเพื่อให้รีสตาร์ทได้ในสถานะเดียวกันหากได้รับเหตุการณ์ onRestarted
แอปมีเวลาบันทึกสถานะเพียงไม่กี่วินาที และหลังจากนั้นจะถูกยุติการทำงาน ดังนั้นเป็นความคิดที่ดีที่จะบันทึกสถานะของแอปเพิ่มในขณะที่แอปทำงานตามปกติ
หลังจากได้รับ onSuspend
แล้ว ระบบจะไม่ส่งกิจกรรมใดๆ ไปยังแอปอีก เว้นแต่การระงับจะถูกยกเลิกด้วยเหตุผลบางประการ ในกรณีนี้ ระบบจะส่ง onSuspendCanceled
ไปยังแอปและจะไม่ยกเลิกการโหลด
chrome.runtime.onSuspend.addListener(function() {
// Do some simple clean-up tasks.
});