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

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

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

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

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

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

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

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

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

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

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

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

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

विंडो बनाएं

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

Chrome ऐप्स में Windows किसी भी 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.
});