2014-04-13 53 views
5

मेरे पास एक activity और एक service वाला ऐप है। अगर मैं activity को मारता हूं जबकि service चल रहा है तो यह भी मार जाता है। यह मेरे लिए बहुत महत्वपूर्ण है कि सेवा मारे नहीं जाती है। यह कैसे बनाया जाए जब सिस्टम मारता है (या मैं "हालिया ऐप्स" सूची को साफ़ करके इसे मारता हूं) activityservice अभी भी सक्रिय रहता है जब तक कि यह अपना काम पूरा नहीं कर लेता है? अग्रिम में धन्यवाद!एप्लिकेशन/गतिविधि मारे जाने पर सिस्टम हत्या सेवा से कैसे बचें

+0

क्या आप वाकई डेस्ट्रॉय में या कहीं भी अपने गतिविधि कोड में सेवा को नष्ट नहीं करते हैं? –

+0

हाँ मुझे यकीन है क्योंकि मैं लॉग में देखता हूं कि 'सेवा' चल रहा है और जब मैं "हालिया ऐप" सूची को साफ़ करता हूं तो' सेवा 'तुरंत मार जाती है और फिर पुनरारंभ होती है क्योंकि मैंने 'START_STICKY' टैग सेट किया है। – Salivan

+0

ओह, मैं तुम्हें मिला, आप एक अलग बात के बारे में पूछ रहे थे। लेकिन हाँ, मुझे इसके बारे में भी यकीन है। मैं इसे 'गतिविधि' के कोड में मैन्युअल रूप से नष्ट नहीं करता हूं। लेकिन, दूसरी तरफ, मेरी 'गतिविधि' में ओवरड्रिन 'ऑनस्ट्रोय()' विधि भी नहीं है, तो हो सकता है कि यह उस विधि में डिफ़ॉल्ट रूप से सभी संबंधित सेवाओं को मारने के लिए सेट हो? – Salivan

उत्तर

1

यह मेरे लिए बहुत महत्वपूर्ण सेवा नहीं मारा हो जाता है कि

आपका प्रक्रियाओं पर मारा जा सकता है किसी भी समय, किसी भी कारण से, उपयोगकर्ता गतिविधि (हालिया कार्य सूची, तृतीय पक्ष कार्य प्रबंधक, सेटिंग में "बल रोकें") के आधार पर या ओएस जरूरतों के आधार पर (सिस्टम रैम कम हो रहा है) के आधार पर। आप इसे रोक नहीं सकते।

आप अपनी प्रक्रिया को समाप्त करने के लिए ओएस के बाधाओं को कम करने के लिए कुछ कदम उठा सकते हैं, जैसे सेवा पर startForeground() का उपयोग करना, लेकिन यह उपयोगकर्ता को आपके ऐप की प्रक्रिया के साथ क्या करना चाहता है।

मैं उस सेवा से एक विंडो प्रदर्शित कर रहा हूं ताकि सेवा बंद हो जाए तो विंडो गायब हो जाती है।

मुमकिन है, उपयोगकर्ता यदि उपयोगकर्ता स्पष्ट रूप से हाल ही के कार्य सूची, एक कार्य प्रबंधक, आदि आप निश्चित रूप से कर रहे हैं के अपने दस्तावेज में उन सलाह देने के लिए स्वागत करते माध्यम से आपके एप्लिकेशन से छुटकारा हो रही है गायब हो जाने की अपने विंडो चाहता है इसका कोई नकारात्मक प्रभाव होगा।

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

+0

ठीक है, क्या मैं दूसरी प्रक्रिया में सेवा शुरू कर सकता हूं ताकि जब उपयोगकर्ता मेरी आवेदन प्रक्रिया को मारता है तो मेरी सेवा प्रक्रिया अभी भी छूटी नहीं रहती है? – Salivan

+0

@ सलीवान: हां, मैं बस इसके बारे में एक अद्यतन जोड़ रहा था - संपादित उत्तर देखें। – CommonsWare

+0

विंडो में एक करीबी बटन है ताकि उपयोगकर्ता इसे दबाकर उस विंडो से छुटकारा पा सके। यह भी सेवा बंद कर देता है। लेकिन क्या उपयोगकर्ता द्वारा गतिविधि की हत्या के बाद सेवा जीवित रहने का कोई तरीका है? – Salivan

2

आप अपने सेवा में onStartCommand से START_STICKY लौटने की कोशिश कर सकते हैं:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    handleCommand(intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 
+0

मैंने पहले ही ऐसा किया है लेकिन इससे कोई मदद नहीं मिलती क्योंकि मुझे चाहिए कि 'सेवा' रुक जाएगी। मैं उस 'सेवा' से एक विंडो प्रदर्शित कर रहा हूं, इसलिए यदि 'सेवा' बंद हो जाती है तो विंडो गायब हो जाती है। खिड़की को फिर से बनाने के लिए यह समझ में नहीं आता है। मुझे स्क्रीन पर रहने के लिए इसकी आवश्यकता है, भले ही 'गतिविधि' मारे जाए, इसलिए मुझे उस सेवा को अनदेखा रखने की आवश्यकता है जब तक कि खिड़की बंद न हो जाए। – Salivan

+1

आप 'startForeground' आज़मा सकते हैं। – Sipka

+0

मुझे नहीं लगता कि यह मदद कर सकता है क्योंकि जब उपयोगकर्ता "हालिया ऐप्स" सूची को साफ़ करता है तो मैं 'सेवा' को मारने से बचना चाहता हूं। सिस्टम द्वारा नहीं। – Salivan

0

क्या आप एक बाध्य सेवा चला रहे हैं? यदि ऐसा है, तो अंतिम क्लाइंट गतिविधि डिस्कनेक्ट होने पर सिस्टम इसे मार देगा (टर्मिनेट)। यहाँ reference page से blurb है:

पिछले ग्राहक सेवा से unbinds करता है, सिस्टम सेवा नष्ट कर देता है (जब तक सेवा भी startService द्वारा शुरू किया गया())।

+0

बाध्य सेवा नहीं है और सिस्टम नहीं है। मैं चाहता हूं कि उपयोगकर्ता "हालिया ऐप्स" सूची को साफ़ करने के बाद और गतिविधि को मारने के बाद सेवा जीवित रहे। – Salivan

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