कंटेनर ओपनर

पब्लिक क्लास ContainerOpener

कंटेनर खोलने के लिए हेल्पर क्लास.

यह openContainer(String, Container.Callback) तरीके के आस-पास रैपर है. यह उन उपयोगकर्ताओं के लिए है जिन्हें इसके कंट्रोल की ज़रूरत नहीं होती है.

कंटेनर, इन तीन स्थितियों में हो सकता है:

  • डिफ़ॉल्ट: यह वह कंटेनर है जो ऐप्लिकेशन के साथ शिप किया जाता है (या तो बाइनरी कंटेनर या ऐसी json फ़ाइल जो कंटेनर में बदली गई हो).
  • पुराना: ऐसा कंटेनर जिसे सर्वर से डाउनलोड किया गया है, लेकिन हाल ही में डाउनलोड नहीं किया गया है.
  • नया: ऐसा कंटेनर जिसे सर्वर से हाल ही में डाउनलोड किया गया है.

यहां एक उदाहरण दिया गया है, जिसमें कॉलर, नॉन-डिफ़ॉल्ट कंटेनर पाने के लिए 100 मिलीसेकंड तक इंतज़ार करना चाहता है (डिफ़ॉल्ट कंटेनर का समय खत्म होने पर उसे वापस पाना).

   ContainerFuture future =
       ContainerOpener.openContainer(tagManager, containerId, OpenType.PREFER_NON_DEFAULT, 100);
   Container container = future.get();
 

अगर कॉलर, कंटेनर के उपलब्ध होने पर एसिंक्रोनस रूप से सूचना पाना चाहता है, लेकिन मैन्युअल तरीके से टाइम आउट को 0.5 सेकंड पर सेट करना चाहता है, तो कॉलर को ContainerOpener.Notifier को सब-क्लास करना चाहिए. इस्तेमाल का उदाहरण:

   ContainerOpener.openContainer(tagManager, containerId, OpenType.PREFER_NON_DEFAULT,
       500, new ContainerOpener.Notifier() {
         @Override
         void containerAvailable(Container container) {
           // Code to handle the container available notification and save the container.
         }
       });
 

नेस्ट की गई क्लास की खास जानकारी

इंटरफ़ेस ContainerOpener.ContainerFuture वह ऑब्जेक्ट जो कंटेनर दिखाएगा. 
इंटरफ़ेस ContainerOpener.Notifier जब कोई कंटेनर इस्तेमाल के लिए उपलब्ध होगा, तब ऑब्जेक्ट को सूचना मिलेगी. 
enum ContainerOpener.OpenType कंटेनर खोलने के लिए प्राथमिकताएं. 

लगातार मिलने वाली खास जानकारी

लंबा DEFAULT_TIMEOUT_IN_MILLIS कंटेनर का अनुरोध करने के लिए, मिलीसेकंड में डिफ़ॉल्ट टाइम आउट.

सार्वजनिक तरीके से जुड़ी खास जानकारी

स्टैटिक ContainerOpener.ContainerFuture
openContainer(TagManager tagManager, स्ट्रिंग containerId, ContainerOpener.OpenType openType, लॉन्ग timeoutInMillis)
स्टैटिक शून्य
openContainer(TagManager tagManager, स्ट्रिंग containerId, ContainerOpener.OpenType openType, लॉन्ग timeoutInMillis, ContainerOpener.Notifier नोटिफ़ायर)

स्थिरांक

सार्वजनिक स्टैटिक फ़ाइनल लंबी DEFAULT_TIMEOUT_IN_MILLIS

कंटेनर का अनुरोध करने के लिए, मिलीसेकंड में डिफ़ॉल्ट टाइम आउट.

कॉन्सटेंट वैल्यू: 2,000

सार्वजनिक तरीके

ContainerOpener.ContainerFuture openContainerTagManagertagManagerContainerOpener.OpenType

कंटेनर के लोड होने के लिए, timeoutInMillis बार इंतज़ार किया जाता है. openType दिए गए डेटा के आधार पर, डिफ़ॉल्ट या नया नहीं होता है.

अगर ओपन टाइप PREFER_NON_DEFAULT है, तो एक ऐसा कंटेनर लोड होता है जो डिफ़ॉल्ट नहीं होता (नेटवर्क से सेव किया गया या वापस लाया गया) और इनमें से कोई एक स्थिति होने पर, ContainerFuture को अनब्लॉक कर दिया जाता है:

  • एक सहेजा गया कंटेनर लोड हो जाता है.
  • अगर कोई सेव किया गया कंटेनर नहीं है, तो नेटवर्क कंटेनर लोड होता है या नेटवर्क की गड़बड़ी होती है.
  • समय सीमा खत्म हो जाती है.

अगर नेटवर्क में कोई गड़बड़ी होती है या टाइमर की समयसीमा खत्म हो जाती है, तो get() डिफ़ॉल्ट कंटेनर दिखा सकता है.

अगर ओपन टाइप PREFER_FRESH है, तो एक नया (सेव किया गया या नेटवर्क से वापस लाया गया) कंटेनर लोड होता है और इनमें से कोई एक कार्रवाई होते ही ContainerFuture को अनब्लॉक कर दिया जाता है:

  • एक सेव किया गया नया कंटेनर लोड हो जाता है.
  • अगर कोई सेव किया गया कंटेनर नहीं है या सेव किया गया कंटेनर पुराना है, तो नेटवर्क कंटेनर लोड होता है या नेटवर्क की गड़बड़ी होती है.
  • समय सीमा खत्म हो जाती है.

अगर नेटवर्क में कोई गड़बड़ी होती है या टाइमर की समयसीमा खत्म हो जाती है, तो get() डिफ़ॉल्ट कंटेनर या सेव किया गया पुराना कंटेनर दिखा सकता है.

अगर आपने दिए गए containerId के साथ openContainer को दूसरी बार कॉल किया है, तो एक ContainerFuture मिलेगा. इसका get() वही कंटेनर दिखाएगा जो पहले कॉल में किया गया था.

पैरामीटर
tagManager वह TagManager जिस पर OpenContainer को कॉल करना है
containerId लोड किए जाने वाले कंटेनर का आईडी
openType कंटेनर को खोलने का विकल्प
timeoutInMillis सेव किए गए स्टोर से कंटेनर को लोड होने में लगने वाले मिलीसेकंड की ज़्यादा से ज़्यादा संख्या. अगर यह शून्य है, तो DEFAULT_TIMEOUT_IN_MILLIS का इस्तेमाल किया जाएगा.
रिटर्न
  • एक ऑब्जेक्ट, जिसका get तरीका कंटेनर लौटाएगा, लेकिन जब तक कंटेनर उपलब्ध नहीं हो जाता, तब तक वह TimeInMillis तक ब्लॉक कर सकता है.

सार्वजनिक स्टैटिक शून्य openContainer (TagManager tagManager, स्ट्रिंग tagManager, ContainerOpener.OpenType tagManagertagManagertagManagertagManagerContainerOpener.Notifier

कंटेनर के लोड होने के लिए, timeoutInMillis बार इंतज़ार किया जाता है. openType दिए गए डेटा के आधार पर, डिफ़ॉल्ट या नया नहीं होता है.

अगर ओपन टाइप PREFER_NON_DEFAULT है, तो एक नॉन-डिफ़ॉल्ट (नेटवर्क से सेव किया गया या वापस लाया गया) कंटेनर लोड होता है और नोटिफ़ायर में भेजा जाता है. इनमें से कोई भी एक कार्रवाई होते ही, सूचना देने वाले को कॉल किया जाता है:

  • एक सहेजा गया कंटेनर लोड हो जाता है.
  • अगर कोई सेव किया गया कंटेनर नहीं है, तो नेटवर्क कंटेनर लोड होता है या नेटवर्क की गड़बड़ी होती है.
  • समय सीमा खत्म हो जाती है.

अगर नेटवर्क में कोई गड़बड़ी होती है या टाइमर की समयसीमा खत्म हो जाती है, तो containerAvailable(Container) में भेजा गया कंटेनर डिफ़ॉल्ट कंटेनर होता है.

अगर ओपन टाइप PREFER_FRESH है, तो एक नया (नेटवर्क से सेव किया गया या वापस लाया गया) कंटेनर लोड होता है और नोटिफ़ायर में भेजा जाता है. इनमें से कोई भी एक कार्रवाई होते ही, सूचना देने वाले को कॉल किया जाता है:

  • एक सेव किया गया नया कंटेनर लोड हो जाता है.
  • अगर कोई सेव किया गया कंटेनर नहीं है या सेव किया गया कंटेनर पुराना है, तो नेटवर्क कंटेनर लोड होता है या नेटवर्क की कोई गड़बड़ी होती है.
  • समय सीमा खत्म हो जाती है.

अगर नेटवर्क में कोई गड़बड़ी होती है या टाइमर की समयसीमा खत्म हो जाती है, तो containerAvailable(Container) में दिया गया कंटेनर, डिफ़ॉल्ट या सेव किया गया पुराना कंटेनर हो सकता है.

अगर दिए गए containerId का इस्तेमाल करके, openContainer(TagManager, String, ContainerOpener.OpenType, Long) को दूसरी बार कॉल किया जाता है, तो पिछली कॉल से मिला वही कंटेनर, सूचना देने वाले टूल के उपलब्ध होते ही उसमें भेज दिया जाएगा.

पैरामीटर
tagManager वह TagManager जिस पर OpenContainer को कॉल करना है
containerId लोड किए जाने वाले कंटेनर का आईडी
openType कंटेनर को खोलने का विकल्प
timeoutInMillis सेव किए गए स्टोर और/या नेटवर्क से कंटेनर को लोड होने में लगने वाले मिलीसेकंड की ज़्यादा से ज़्यादा संख्या. अगर यह शून्य है, तो DEFAULT_TIMEOUT_IN_MILLIS का इस्तेमाल किया जाएगा.
नोटिफ़ायर एक नोटिफ़ायर, जिसे कंटेनर उपलब्ध होने पर कॉल किया जाएगा. उपलब्ध होने और टाइम आउट से पहले लोड होने पर, इसे सेव किए गए या नेटवर्क कंटेनर के साथ कॉल किया जाएगा. ऐसा न होने पर, इसे डिफ़ॉल्ट कंटेनर के साथ कॉल किया जाएगा. नोटिफ़ायर को किसी दूसरे थ्रेड से कॉल किया जा सकता है.