इस पेज पर, बैकग्राउंड में चलने वाले टास्क को सही तरीके से सेट अप करने के कुछ सबसे सही तरीके बताए गए हैं. इन सबसे सही तरीकों का मकसद, बैटरी की खपत को कम करना है. हालांकि, इनसे डिवाइस की परफ़ॉर्मेंस को अन्य तरीकों से भी बेहतर बनाया जा सकता है. जैसे, नेटवर्क का इस्तेमाल कम करना.
के बारे में बताया है.सबसे सही सीमाएं चुनें और टास्क को एक साथ करें
डिवाइस पर टास्क का लोड कम करने के लिए, सबसे सही सीमाएं तय करना ज़रूरी है. (JobScheduler की नौकरियों के लिए, कंस्ट्रेंट की सूची देखने के लिए JobInfo.Builder
पर जाएं.) उदाहरण के लिए, अगर आपको यह पक्का करना है कि आपका ऐप्लिकेशन बैटरी की खपत न करे, तो RequiresCharging
constraint तय करना एक अच्छा विकल्प है. इस शर्त से सिस्टम को यह पता चलता है कि बैटरी का लेवल बढ़ने पर ही जॉब को चलाया जाए. इसी तरह, वाई-फ़ाई का इस्तेमाल करने पर आम तौर पर मोबाइल डेटा की तुलना में कम बैटरी खर्च होती है. इसलिए, अगर आपके टास्क के लिए नेटवर्क कनेक्शन की ज़रूरत है, लेकिन यह तब तक इंतज़ार कर सकता है, जब तक कि अनलिमिटेड डेटा वाला नेटवर्क उपलब्ध न हो जाए, तो NetworkType.UNMETERED
की शर्त सेट करना एक अच्छा विकल्प है.
इसके अलावा, अगर आपके पास एक जैसे कई टास्क हैं और वे एक ही तरह की शर्तों के दायरे में आते हैं, तो आम तौर पर उन्हें एक ही टास्क में जोड़ देना बेहतर होता है. इससे डिवाइस सिर्फ़ एक बार चालू होता है. उदाहरण के लिए, मान लें कि आपके ऐप्लिकेशन में तीन अलग-अलग डेटा सेट हैं, जिन्हें क्लाउड स्टोरेज के साथ सिंक करना है. हर डेटा सेट के लिए अलग-अलग टास्क शेड्यूल करने के बजाय, "डेटा सिंक करें" टास्क को शेड्यूल करना ज़्यादा बेहतर होता है. साथ ही, ज़रूरी शर्तें तय करें और उस टास्क को सभी लंबित डेटा सिंक करने दें.
हालांकि, आपको अलग-अलग टास्क को एक ही टास्क में नहीं जोड़ना चाहिए. इसके बजाय, बस यह पक्का करें कि हर टास्क के लिए सही सीमाएं तय की गई हों. उदाहरण के लिए, अगर टास्क को कम प्राथमिकता दी गई है, तो यह ज़रूर बताएं कि उन्हें तब चलना चाहिए, जब डिवाइस इस्तेमाल में न हो और चार्ज हो रहा हो. इस तरह, डिवाइस के कई बार चालू होने पर भी, उपयोगकर्ता के अनुभव पर कोई असर नहीं पड़ेगा. साथ ही, बैटरी लाइफ़ पर भी कोई असर नहीं पड़ेगा.
सिर्फ़ उन टास्क को 'तेज़ी से पूरा किया जाने वाला' के तौर पर मार्क करें जिन्हें समय पर पूरा करना ज़रूरी है
अगर कोई टास्क बहुत ज़रूरी है, तो उसे 'जल्द पूरा करें' के तौर पर मार्क करें. (JobScheduler की नौकरियों के लिए, JobInfo.Builder.setExpedited(true)
को कॉल करें.) ऐसा करने से, टास्क को कई तरीकों से प्राथमिकता मिलती है. उदाहरण के लिए, सिस्टम उन टास्क को तुरंत पूरा करता है. साथ ही, पावर मैनेजमेंट से जुड़ी पाबंदियों का असर, तेज़ी से पूरे होने वाले टास्क पर कम पड़ता है.
इन वजहों से, आपको किसी टास्क को तेज़ी से पूरा करने के लिए सिर्फ़ तब मार्क करना चाहिए, जब इसकी ज़रूरत हो. तेज़ी से पूरे किए जाने वाले टास्क, सिस्टम की कुछ क्षमताओं को बदल सकते हैं. इसलिए, तेज़ी से पूरे किए जाने वाले टास्क में, सामान्य टास्क की तुलना में ज़्यादा बैटरी खर्च हो सकती है.
किसी टास्क को 'जल्द पूरा होने वाला' के तौर पर सिर्फ़ तब मार्क करें, जब वह समय के हिसाब से ज़रूरी हो. साथ ही, अगर उसे पूरा होने में ज़्यादा समय लगता है, तो उपयोगकर्ता अनुभव पर असर पड़ता हो. उदाहरण के लिए, अगर आपका ऐप्लिकेशन ज़्यादा प्राथमिकता वाले FCM मैसेज को हैंडल करने के लिए कोई टास्क चलाता है, तो टास्क को तेज़ी से पूरा होने वाला टास्क के तौर पर मार्क करने की यह एक सही वजह है. हालांकि, सिस्टम के ऑप्टिमाइज़ेशन को बदलने के लिए, किसी टास्क को तुरंत पूरा होने वाला टास्क के तौर पर मार्क नहीं करना चाहिए.
देखें कि आपके टास्क क्यों बंद किए गए
अगर आपके टास्क पूरे होने से पहले ही रुक जाते हैं, तो WorkInfo.getStopReason()
को कॉल करके, यह पता लगाया जा सकता है कि वे क्यों रुके. (JobScheduler की नौकरियों के लिए, JobParameters.getStopReason()
को कॉल करें. ऐसा करना ज़रूरी है. इसकी कुछ वजहें हैं. सबसे पहले, आपको अपने टास्क पूरे करने होते हैं. टास्क रुकने की वजह जानने से, आपको इस तरह की स्थितियों से बचने में मदद मिलती है. हालांकि, सिस्टम के संसाधनों का ज़्यादा इस्तेमाल करने वाली गतिविधियों की वजह से, सिस्टम टास्क को रोक सकता है. आपको यह नहीं चाहिए कि आपका ऐप्लिकेशन, बैटरी या नेटवर्क का ज़रूरत से ज़्यादा इस्तेमाल करे.
उदाहरण के लिए, अगर आपके टास्क अक्सर STOP_REASON_TIMEOUT
की वजह से रुक जाते हैं, तो हो सकता है कि कोई ऐसा खास मामला हो जिसकी वजह से आपके टास्क पूरे होने में उम्मीद से ज़्यादा समय लग रहा हो.
हमारा सुझाव है कि आप अपने ऐप्लिकेशन के टास्क के रुकने और इसकी वजहों को ट्रैक करने के लिए, अपने Analytics इंजन का इस्तेमाल करें.