วงจรของแอป Chrome

หน้ารันไทม์และหน้าเหตุการณ์ของแอปมีหน้าที่จัดการวงจรของแอป รันไทม์ของแอปจะจัดการการติดตั้งแอป ควบคุมหน้ากิจกรรม และสามารถปิดแอปได้ทุกเมื่อ หน้าเหตุการณ์จะคอยฟังเหตุการณ์จากรันไทม์ของแอป รวมถึงจัดการว่าจะเปิดแอปใดและอย่างไร

วิธีการทำงานของวงจร

รันไทม์ของแอปจะโหลดหน้าเหตุการณ์จากเดสก์ท็อปของผู้ใช้และเหตุการณ์ 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.
});