नष्ट मैं आमतौर पर एक अलग नियंत्रक वर्ग है, जो Activity
रोक हैंडलर runnable कार्यों जब गतिविधि
@Override
public boolean handleMessage(int what, Object data) {
switch (what) {
case ExerciseViewEvent.STARTUP:
workerHandler.post(new Runnable() {
public void run() {
onStartup();
}
});
return true;
}
इस से घटनाओं से निपटने के लिए एक विशेष विधि है आदेश यूआई धागा उत्तरदायी रखने के लिए और किया जाता है करने के लिए सभी क्रियाएँ घटनाओं प्रतिनिधि पृष्ठभूमि कार्यों में सभी computations बनाओ।
हालांकि, जब Activity.onDestroy()
विधि प्रणाली द्वारा कहा जाता है, controller.dispose()
विधि कहा जाता है, जो नियंत्रक में सभी सामान इस तरह
@Override
protected synchronized void dispose() {
.................
if (model != null) {
synchronized (model) {
model.dispose();
}
model = null;
}
helper = null;
.....................
super.dispose();
}
आप देख सकते हैं, नियंत्रक के निपटान यूआई धागा में होता है को साफ, बिना इसे एक हैंडलर धागे में सौंपना।
समस्याहोता है जब, उदाहरण के लिए, onDestroy
onStartup()
विधि के बीच में कहा जाता है: onDestroy
मॉडल और अन्य सभी संदर्भों को साफ, लेकिन onStartup
विधि के अंदर यह कुछ बिंदु पर मॉडल का उपयोग करने की कोशिश करता है, लेकिन यह है पर विचार null
, एक अपवाद फेंक दिया गया है।
इस मुद्दे को हल करने का सबसे अच्छा तरीका क्या है? मैं हर नियंत्रक विधि को लॉक नहीं करना चाहता क्योंकि उनमें से कुछ एक दूसरे के बीच हस्तक्षेप किए बिना एक साथ हो सकते हैं।
इसके अलावा, यह संभव है कि सिस्टम द्वारा डेस्ट्रॉय विधि को नहीं बुलाया जाए। – Yury
अच्छी बात यूरी, लेकिन अगर इसे नहीं कहा जाता है, तो गतिविधि द्वारा आवंटित सभी वस्तुओं को स्वयं JVM द्वारा नष्ट कर दिया जाता है? तो मुझे इसके बारे में चिंता करने की ज़रूरत नहीं है, है ना? निपटान में मैंने केवल सभी वस्तुओं का निपटारा किया है, और कुछ नहीं। –