2013-04-22 11 views
7

मैं एक ऐप बना रहा हूं जिसे हर घंटे एक फ़ंक्शन निष्पादित करने की आवश्यकता होती है, यहां तक ​​कि ऐप बंद हो जाता है।एंड्रॉइड डेवलपर - अलार्म मैनेजर बनाम सेवा

सबसे पहले, मैंने एक सेवा बनाने का विचार किया, लेकिन मेरे परीक्षणों के दौरान, मुझे एहसास हुआ कि एंड्रॉइड कभी-कभी मेरी सेवा को मार देता है। तो मैं एक और समाधान की तलाश में था और मुझे अलार्ममेनगर मिला। मैंने इसे लागू किया है और ऐसा लगता है लेकिन मुझे संदेह है कि अगर यह वही सेवा होगी या यह हमेशा के लिए चलेगा? (मोबाइल के रिबूट तक ...)

एक और सवाल, अलार्म मैनेजर में प्रक्रिया निष्पादित करने के लिए एक नया धागा बनाना आवश्यक है या यह सीधे अन्य धागे में चलता है?

उत्तर

6

मैंने इसे लागू किया है और ऐसा लगता है लेकिन मुझे संदेह है कि यह सेवा समान होगा या यह हमेशा के लिए चलेगा? (मोबाइल के रिबूट तक ...)

यह जब तक चलेंगे:

  • डिवाइस रिबूट है के रूप में आप का उल्लेख किया, या
  • उपयोगकर्ता आपका ऐप्लिकेशन अनइंस्टॉल, या
  • आप ईवेंट को स्वयं रद्द कर देते हैं, या
  • उपयोगकर्ता सेटिंग में जाता है, इंस्टॉल किए गए ऐप्स की सूची में आपका ऐप पाता है, उस प्रविष्टि पर टैप करता है, और फोर्स स्टॉप बटन
पर क्लिक करता है

यह संभव है कि आपके ऐप को अपग्रेड करने के बाद अलार्म को फिर से निर्धारित करने की आवश्यकता होगी (मैं भूल जाता हूं ...)।

अलार्म प्रबंधक में प्रक्रिया निष्पादित करने के लिए एक नया धागा बनाना आवश्यक है या यह सीधे अन्य धागे में चलता है ??

जब तक आप जो काम करने जा रहे हैं, वह केवल कुछ मिलीसेकंड नहीं लेगा, आप इसके लिए पृष्ठभूमि धागा चाहते हैं।

  1. आप एक _WAKEUP शैली अलार्म का उपयोग नहीं कर रहे हैं, तो प्रयोग कर एक getService()PendingIntent हर घंटे एक IntentService करने के लिए नियंत्रण भेजने के लिए

  2. आप एक _WAKEUP शैली उपयोग कर रहे हैं: यह दो संभावित पैटर्न की ओर जाता है अलार्म, आप एक getBroadcast()PendingIntent उपयोग करने की आवश्यकता होगी, और यह my WakefulIntentService की है या तो अपने उपवर्ग आह्वान, या आप एक WakeLock खुद के प्रबंधन करने के लिए उपकरण को सक्रिय रखने के लिए, जबकि आप काम के अपने बिट कर की आवश्यकता होगी

+2

इसके अलावा, अगर आप डिवाइस को रीबूट करते समय इसे रोकना नहीं चाहते हैं, तो आप इसे 'manifest' में 'BOOT_COMPLETED' के' इरादे-फ़िल्टर 'के साथ पंजीकृत कर सकते हैं ताकि डिवाइस रीबूट हो जाने पर यह फिर से शुरू हो जाए – codeMagic

+0

@CommonsWare अपग्रेड के मामले में, अलार्म-घड़ी ऐप बेकार नहीं होगा क्योंकि इसे स्वचालित रूप से फिर से सक्षम नहीं किया जा सकता है? मेरा मतलब है, आपने लिखा है कि अपग्रेड के बाद, अलार्ममेनर ऐप से संबंधित सब कुछ रद्द कर देता है, है ना? चल रहे पृष्ठभूमि समाधानों के बारे में, क्या आपके पास उनमें से प्रत्येक के लिए कोई नमूना कोड है? –

+0

@androiddeveloper: "अपग्रेड के मामले में, क्या अलार्म-घड़ी ऐप बेकार नहीं होगा क्योंकि इसे स्वचालित रूप से फिर से सक्षम नहीं किया जा सकता है?" - यदि आवश्यक हो तो 'ACTION_PACKAGE_CHANGED' के लिए सुनो। "आपने लिखा है कि अपग्रेड के बाद, अलार्ममेनर ऐप से संबंधित सब कुछ रद्द कर देता है, है ना?" - नहीं, यह वह नहीं है जो मैंने लिखा था। मैंने लिखा "* यह संभव है * आपके ऐप को अपग्रेड करने के बाद अलार्म को फिर से निर्धारित करने की आवश्यकता होगी (* मैं भूल जाता हूं ...)।" (जोर जोड़ा गया) "चल रहे पृष्ठभूमि समाधानों के बारे में, क्या आपके पास उनमें से प्रत्येक के लिए कोई नमूना कोड है?" -- आप क्या बात कर रहे हैं, मुझे कुछ नहीं मालूम। – CommonsWare

3

नहीं, एंड्रॉइड अनुसूचित अलार्म को मार नहीं पाएगा और जब तक ऐप को प्रतिस्थापित नहीं किया जाता है या डिवाइस रीबूट नहीं किया जाता है तब तक उन्हें योजनाबद्ध रूप से निष्पादित किया जाता है। इन घटनाओं के लिए अलार्म को फिर से निर्धारित करने के लिए प्रसारण रिसीवर का उपयोग करें। फोर्स स्टॉप को रोकने के लिए कोई रास्ता नहीं है क्योंकि यह आपके सभी ऐप घटकों और धागे को पूरी तरह मार देता है।

यह अलार्म प्रबंधक क्या करता है इस पर निर्भर करता है। यदि यह प्रसारण भेजता है, तो रिसीवर सीमा 10 सेकंड है।

यदि यह गतिविधि, सेवा या मंशा सेवा शुरू करता है, तो कोई सीमा नहीं है। गतिविधि और सेवाओं के लिए आपको प्रक्रिया समाप्त होने तक इसे और इरादा सेवाओं के लिए समाप्त करना या रोकना होगा।ध्यान रखें कि आपके पास इरादा सेवा के अंदर कोई अन्य धागा नहीं हो सकता है और आप OnHandleIntent के अंदर कोड तक ही सीमित हैं।

इसके अलावा आपको डिवाइस स्थिति पर विचार करना चाहिए। यदि यह नींद है और आप वेक अप फ्लैग रिसीवर का उपयोग कर रहे हैं तो वेक लॉक की आवश्यकता नहीं होगी, लेकिन अन्य लोग करते हैं। डिवाइस को सोने के लिए वापस जाने में लंबा समय नहीं लगेगा।

सेवा संसाधनों को एक सेवा के साथ बर्बाद न करें क्योंकि अलार्म प्रबंधक जो आप चाहते हैं वह करते हैं।

संबंधित मुद्दे