2016-09-12 7 views
5

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

  • () विधि सेवा के onCreate में, एक runnable पोस्ट:

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

  • रननेबल एक नया धागा शुरू करता है जो रिकेंट से हटाने से बचता है।

यदि मैं सटीक उसी हैंडलर के समान सटीक पोस्ट करता हूं लेकिन गतिविधि से, थ्रेड जीवित नहीं रहता है। सिस्टम संभवतः कैसे जान सकता है? क्या यह किसी भी तरह से ट्रैक करता है कि किस धागे से चलने योग्य पोस्ट किया गया था?

संपादित करें: के रूप में अनुरोध किया है, OnCreate() विधि:

@Override 
public void onCreate() { 
    super.onCreate(); 

    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      new Thread(){ 
       @Override 
       public void run() { 
        while (true) { 
         System.out.println("hello from thread"); 
         try { 
          Thread.sleep(1000); 
         } catch (InterruptedException e1) { 
          e1.printStackTrace(); 
         } 
        } 
       } 
      }.start(); 
     } 
    }, 1000); 
} 
+0

असल में 'Service' के (जब तक आप का उपयोग' IntentService') 'यूआई Thread' पर एंड्रॉयड रन में –

+0

और यूआई थ्रेड की जांच के लिए एंड्रॉइड हैंडलर में 'थ्रेडलोकल' होता है। –

+0

यदि संभव हो तो कृपया अपने कोड को ऑन्रेट() के लिए पोस्ट करें। –

उत्तर

2

अंत में पता चला कि क्या होता है। प्रणाली गैर-सेवा धागे को चुनिंदा रूप से मार नहीं देती है, यह पूरे ऐप को मार देती है और फिर सेवा शुरू करती है, इसलिए ऐसा लगता है कि सेवा के धागे छूटे नहीं थे।

+0

इसलिए यदि आपके पास चल रही प्रक्रिया है (उदा। प्रतिलिपि फ़ाइल) तो आप उस फ़ाइल को खो देंगे? –

+0

@MoshErsan मुझे लगता है कि फ़ाइल जीवित रहेगी लेकिन यह अधूरा होगा। – fhucho

+0

जो मेरा मतलब है, तो हाल ही में ऐप को साफ़ करने से आपकी प्रक्रिया –

1

बस इस पर कुछ प्रकाश डालना चाहते हैं।

एंड्रॉइड घटक धागे के लिए अनजान हैं जो उन्होंने नहीं बनाए थे। इसलिए IntentServiceपर हैंडलइन्टेंट() पर उपयोग किए गए थ्रेड से निपटने के लिए, नियमित सेवा किसी भी थ्रेड पर ध्यान नहीं देगी जिसे आपने स्वयं फोरक किया है।

एक बार सेवा नष्ट हो जाने के बाद, जब तक एंड्रॉइड प्रक्रिया को समाप्त नहीं करता तब तक कोई भी थ्रेड इसे जारी नहीं रखेगा।

अपने धागे अप्रत्याशित रूप से रोक रहे हैं, तो सेवा कोई लेना देना नहीं है - फिर से, सेवा धागे कि आप अपने आप कांटा का कुछ भी नहीं जानता है।

+0

मुझे इस बारे में पता है, यही कारण है कि व्यवहार इतना भ्रमित था। – fhucho

0

संदर्भ से,

यह उसी तरह पीठ पर दबाने में एप्लिकेशन इस्तीफा बार बार करता है। कभी-कभी, यह अपनी पृष्ठभूमि प्रक्रियाओं को भी मारता है, लेकिन कभी-कभी यह नहीं होता:

हाल के कार्यों में एक प्रविष्टि को हटाने से प्रक्रिया के लिए मौजूद किसी भी पृष्ठभूमि प्रक्रिया को मार दिया जाएगा। यह सीधे सेवाओं को रोकने का कारण नहीं बनता है, हालांकि उनके लिए एक एपीआई है कि यह पता लगाने के लिए कि क्या वे चाहते हैं कि उन्हें रोकना चाहिए, कार्य को हटा दिया गया था। ऐसा इसलिए है कि एक ई-मेल ऐप का हालिया कार्य हटाने से ई-मेल की जांच बंद नहीं हो जाएगी।

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

तो मूल रूप से, यह ऐप के लिए निर्णय लेने के लिए तैयार है, और इस पर निर्भर करता है कि ऐप को कैसे कोड किया गया था।सेटिंग्स> ऐप्स> स्क्रीन में स्क्रीन देखने के लायक है यह देखने के लिए कि प्रत्येक ऐप

कृपया अधिक जानकारी के लिए नीचे संदर्भ लिंक देखें।

Refrence लिंक: -

http://lifehacker.com/what-happens-when-you-remove-an-app-from-androids-mult-1179868228

http://www.howtogeek.com/169549/what-exactly-happens-when-you-swipe-an-android-app-from-the-recent-apps-list/

https://plus.google.com/+DianneHackborn/posts/GfwRYCC42uX

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

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