मेरे पास ActivityA
है, जिसमें एक बटन है। button
पर क्लिक करने पर, यह एक और ActivityB
खोलता है।एंड्रॉइड: बैक बटन दबाएं जबकि AsyncTask चल रहा है
onCreate()
ActivityB
की विधि, मैं AsyncTask
शुरू कर रहा हूं जो सर्वर से कनेक्ट होता है और परिणाम लाता है और इसे स्क्रीन पर प्रदर्शित करता है।
public class ActivityB extends Activity {
AsyncFetch asyncFetch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(null != savedInstanceState) {
return;
}
asyncFetch = new AsyncFetch();
asyncFetch.execute();
}
}
private class AsyncFetch extends AsyncTask<Object, Void, Object> {
@Override
protected void onPostExecute(Object o) {
}
@Override
protected Object doInBackground(Object... params) {
//contacts the http server.
}
}
AsyncFetch
को क्रियान्वित करते हैं, जब मैं प्रेस पलटवार, ActivityB
तुरंत नष्ट नहीं हो रही है:
यहाँ Activity B
संहिता है। लेकिन AsyncTask
पूरा होने के बाद नष्ट हो जाता है।
बैक प्रेस फ्रीज से बचने के लिए मैं इसे कैसे कार्यान्वित कर सकता हूं? मैं नीचे करने की कोशिश की:
@Override
protected void onDestroy() {
asyncFetch.cancel(true);
super.onDestroy();
}
लेकिन फिर भी यह AsyncTask
को रद्द करने या पूरा करने के लिए इंतजार कर रहा है।
GMail
ऐप की तरह, जब मैं कुछ खोलता हूं। प्रक्रिया में रहते हुए यदि मैं वापस बटन दबाता हूं, तो यह उस Activity
से बाहर आता है।
क्या पृष्ठभूमि प्रक्रिया को लागू करने का कोई अन्य तरीका है? इसे लागू करने के लिए कोई भी design pattern
? कृपया मुझे बताओ।
किसी भी मदद की सराहना की जाती है।
क्या आपको बैककी दबाए जाने पर भी सर्वर से उस प्रतिक्रिया की आवश्यकता होगी ?? – Elltz
AsyncTasks सही ढंग से लागू होने पर UI थ्रेड को अवरुद्ध नहीं करते हैं। अपना पूरा कोड पोस्ट करें। – biegleux
यूआई अवरुद्ध नहीं हो रहा है। लेकिन एसिंक पूरा होने तक गतिविधि नष्ट नहीं हो रही है। – User12111111