2014-04-11 14 views
9

मैं उपयोगकर्ता को टोस्ट नोटिफिकेशन के साथ हर 'एक्स' मिनट प्रदान करना चाहता हूं, मैंने सेवा की मदद से ऐसा करने की कोशिश की, लेकिन जब आवेदन मारे गए, तो सेवा बंद हो जाती है। वही समस्या इराद सेवा के साथ भी होती है, आवेदन के मारने के बाद भी मुझे स्मृति में थ्रेड/सेवा रखने के लिए क्या करना चाहिए?ऐप की हत्या के बाद पृष्ठभूमि में धागा कैसे चलाएं

+1

अच्छा प्रश्न – Pankaj

उत्तर

4

में इस कोड स्निपेट को लागू करें अपने प्रश्न के मामले में थोड़ा भ्रमित कर रहे हैं:

  • आवेदन एक प्रक्रिया में निहित है। अगर प्रक्रिया मारे जाती है, तो उस प्रक्रिया में चल रही हर चीज मारे जाती है।
  • यदि आप उस प्रक्रिया की मृत्यु से बचने के लिए कुछ चाहते हैं, तो आपको दूसरी प्रक्रिया का उपयोग करना चाहिए और चीज़ को इसके अंदर जीवित रहने के लिए चलाना चाहिए।
  • एक सेवा अपनी प्रक्रिया में चलाया जा सकता है, यहां एक अच्छी पसंद की तरह दिखता है। एंड्रॉइड को देखें: सेवा टैग में प्रक्रिया विशेषता: http://developer.android.com/guide/topics/manifest/service-element.html

लेकिन आप जो करना चाहते हैं वह शायद आसान है: दोहराना कार्य निर्धारित करें। इसके लिए, आप alarm manager का उपयोग कर सकते हैं।

आप कर सकते हैं, उदाहरण के लिए:

  • एक लंबित आशय
  • लंबित इरादे के साथ अलार्म प्रबंधक प्रदान करते हैं हम ऊपर waked जाएगा, फिर से चलाने के अपने खुद के
  • सेवा के एक सेवा ट्रिगर किया जाएगा। इसका लाभ हमेशा आपकी सेवा को चलाने की अनुमति नहीं देता है और यह जानने के लिए समय की गणना करता है कि उसे जागने के लिए कब जाना है (जो बैटरी को हटा देगा)। यहां आवश्यक होने पर अलार्म मैनेजर इसे जगाएगा, आपकी सेवा सिर्फ अपना कार्य निष्पादित करेगी और मर जाएगी।

आपको लगता है कि इस सवाल का जवाब के पहले भाग के साथ इस दृष्टिकोण जोड़ देते हैं तो एक अलग प्रक्रिया में अपनी सेवा चल रही है, तो आप कुछ है कि Android डिवाइस के लिए वास्तव में हल्के वजन है प्राप्त कर सकते हैं: केवल आपकी सेवा (अपनी ही प्रक्रिया में) दिए गए अंतराल पर जाग जाएगा, और आवेदन की प्रक्रिया इस अलार्म द्वारा लॉन्च नहीं की जाएगी, बल्कि केवल सेवा की प्रक्रिया होगी।

और टोस्ट सूचनाओं के बारे में, हाँ, एक सेवा यह करने के लिए एक अच्छी जगह है, लेकिन सूचना पट्टी सूचनाएं प्रदर्शित और उपयोगकर्ता है कि कुछ घटना एक पृष्ठभूमि सेवा के अंदर जगह ले ली सूचित करने के लिए अधिक उपयुक्त हो सकता।

+0

समस्या को हल करने का यह सही उत्तर है। 'अलार्ममेनगर' यह सुनिश्चित करेगा कि रिसीवर को हर मिनट कहा जाता है और इस बारे में चिंता करने के लिए प्रक्रिया को जीवित नहीं रखा जाता है। हालांकि, पूछे जाने वाले प्रश्न के जवाब में अधिकारी का जवाब अधिक है। – velis

1

अग्रभूमि सेवा को लागू करने का प्रयास करें। foreground service

अग्रभूमि सेवा अधिसूचना प्रदर्शित करता है और जब तक आप चाहें तब तक कभी नहीं रोका जाता है।

आपकी सेवा onCreate

Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text), 
     System.currentTimeMillis()); 
Intent notificationIntent = new Intent(this, ExampleActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(this, getText(R.string.notification_title), 
     getText(R.string.notification_message), pendingIntent); 
startForeground(ONGOING_NOTIFICATION_ID, notification); 
+0

के लिए +1 मैं एक टोस्ट प्रदर्शित करना चाहता हूं, अधिसूचना नहीं। –

+1

यदि अधिसूचना प्रदर्शित होती है तो सेवा अग्रभूमि में चलती है और संसाधन बंद होने पर सिस्टम को कभी भी समाप्त नहीं किया जाएगा। –

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