Chrome ऐप्लिकेशन का लाइफ़साइकल

ऐप्लिकेशन के लाइफ़साइकल को मैनेज करने की ज़िम्मेदारी, ऐप्लिकेशन के रनटाइम और इवेंट पेज की होती है. ऐप्लिकेशन रनटाइम, ऐप्लिकेशन इंस्टॉलेशन को मैनेज करता है, इवेंट पेज को कंट्रोल करता है, और ऐप्लिकेशन को कभी भी बंद कर सकता है. इवेंट पेज, ऐप्लिकेशन के रनटाइम से इवेंट सुनता है और यह मैनेज करता है कि क्या और कैसे लॉन्च किया जाए.

लाइफ़साइकल कैसे काम करता है

ऐप्लिकेशन रनटाइम, उपयोगकर्ता के डेस्कटॉप से इवेंट पेज को लोड करता है और onLaunch() इवेंट ट्रिगर होता है. यह इवेंट, इवेंट पेज को बताता है कि कौनसी विंडो लॉन्च करनी हैं और उनके डाइमेंशन क्या हैं.

ऐप्लिकेशन का लाइफ़साइकल कैसे काम करता है

जब इवेंट पेज पर कोई JavaScript नहीं चल रहा है, कोई कॉलबैक बाकी नहीं है, और कोई विंडो नहीं खुली है, तो रनटाइम, इवेंट पेज को अनलोड कर देता है और ऐप्लिकेशन को बंद कर देता है. इवेंट पेज को अनलोड करने से पहले, onSuspend() इवेंट ट्रिगर किया जाता है. इससे इवेंट पेज को ऐप्लिकेशन बंद होने से पहले, सामान्य क्लीन-अप करने का मौका मिलता है.

इवेंट पेज और विंडो बनाना

सभी ऐप्लिकेशन में इवेंट पेज होना चाहिए. इस पेज में ऐप्लिकेशन का टॉप-लेवल लॉजिक होता है. इसमें कोई यूज़र इंटरफ़ेस (यूआई) नहीं होता. साथ ही, यह ऐप्लिकेशन के अन्य सभी पेजों के लिए विंडो बनाने के लिए ज़िम्मेदार होता है.

इवेंट पेज बनाना

इवेंट पेज बनाने के लिए, ऐप्लिकेशन मेनिफ़ेस्ट में "background" फ़ील्ड शामिल करें और स्क्रिप्ट कलेक्शन में background.js शामिल करें. इवेंट पेज में इस्तेमाल की जाने वाली लाइब्रेरी स्क्रिप्ट को पहले "background" फ़ील्ड में जोड़ना होगा:

"background": {
  "scripts": [
    "foo.js",
    "background.js"
  ]
}

आपके इवेंट पेज में onLaunched() फ़ंक्शन शामिल होना चाहिए. इस फ़ंक्शन को तब कॉल किया जाता है, जब आपका ऐप्लिकेशन किसी भी तरह से लॉन्च होता है:

chrome.app.runtime.onLaunched.addListener(function() {
  // Tell your app what to launch and how.
});

विंडो बनाना

इवेंट पेज, अपनी पसंद के मुताबिक एक या उससे ज़्यादा विंडो बना सकता है. डिफ़ॉल्ट रूप से, ये विंडो इवेंट पेज के स्क्रिप्ट कनेक्शन के साथ बनाई जाती हैं. साथ ही, इन्हें इवेंट पेज से सीधे तौर पर स्क्रिप्ट किया जा सकता है.

Chrome ऐप्लिकेशन में मौजूद विंडो, Chrome ब्राउज़र की किसी भी विंडो से नहीं जुड़ी होती हैं. इनमें टाइटल बार और साइज़ कंट्रोल वाला एक वैकल्पिक फ़्रेम होता है. साथ ही, सुझाया गया विंडो आईडी भी होता है. जिन विंडो का आईडी नहीं है वे रीस्टार्ट करने के बाद, अपने साइज़ और जगह पर वापस नहीं आती हैं.

यहां 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.
});