हमारे एंड्रॉइड ऐप में लॉगबैक खोल प्रक्रिया उत्पन्न होती है और फिर प्रोसेसिंग के लिए इसका परिणाम पढ़ता है। हालांकि, जब ऐप बंद हो जाता है (उदा। जब विकास के दौरान पुनर्मूल्यांकन के बाद पुनरारंभ होता है), तो लॉगकैट प्रक्रिया चलती रहेगी। यहाँ इस व्यवहार का एक उदाहरण है:एंड्रॉइड: अभिभावक प्रक्रिया (एप) की मृत्यु हो जाने के बाद चाइल्ड प्रोसेस (एप) की मृत्यु हो गई
processes = new ArrayList<Process>();
try {
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
processes.add(Runtime.getRuntime().exec("logcat -v time"));
} catch (IOException e) {
// oh no!
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
for (Process p : processes) {
p.destroy();
}
};
});
OnCreate() एक परीक्षण app की विधि को यह जोड़ें, यह शुरू करते हैं, तो सेटिंग्स प्रबंधक का उपयोग कर के लिए मजबूर-स्टॉप यह। बच्चे की प्रक्रियाएं चलती रहेंगी, अब 1.
How to kill logcat process initiated by Android application? में प्रोसेसबिल्डर का उपयोग करने का सुझाव दिया गया था, लेकिन यह समाधान नहीं था और प्रक्रिया भी चलती रहेगी।
Stop child process when parent process stops में इसे शटडाउन हुक का उपयोग करने का सुझाव दिया गया था - जो ऊपर दिखाए गए अनुसार काम नहीं करता है।
धन्यवाद!
क्या आपने p.destroy() के बाद p.waitFor() को कॉल करने का प्रयास किया था? अगली कॉल को नष्ट करने से पहले, पूर्व कॉल बच्चे की प्रक्रिया को समाप्त करने और वापसी की स्थिति प्राप्त करने की प्रतीक्षा करती है। – Vikdor
@ विकोडर धन्यवाद, लेकिन नहीं, काम नहीं करता है। वास्तव में, शटडाउन हुक में एक लॉगिंग कॉल जोड़ने से पता चलता है कि एप्लिकेशन (बल-) बंद होने पर इसे बिल्कुल कॉल नहीं किया जाता है। – hez
मुझे लगता है कि 'नई थ्रेड()' में 'प्रक्रियाओं' की प्रति खाली है। क्या आपने 'फॉर लूप' या लूप के बाहर से लॉग किया था? क्या आप प्रक्रियाओं को अस्थिर के रूप में चिह्नित कर सकते हैं ताकि धागे प्रतिलिपि को कैश न करें, और फिर जांचें? – Vikdor