मैंने स्वाइप करके ऐप स्विचर से ऐप को हटाते समय एक आश्चर्यजनक व्यवहार देखा। ऐप में एक सेवा है। जब ऐप "मारे" होता है, तो सेवा से शुरू होने वाले किसी भी थ्रेड चलते रहते हैं, अन्य धागे समाप्त हो जाते हैं।जब आप रिकेंट से कोई कार्य हटाते हैं तो वास्तव में क्या होता है?
- () विधि सेवा के 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);
}
असल में 'Service' के (जब तक आप का उपयोग' IntentService') 'यूआई Thread' पर एंड्रॉयड रन में –
और यूआई थ्रेड की जांच के लिए एंड्रॉइड हैंडलर में 'थ्रेडलोकल' होता है। –
यदि संभव हो तो कृपया अपने कोड को ऑन्रेट() के लिए पोस्ट करें। –