Tôi có một số ActivityA
, có Nút. Khi nhấp vào button
, nó sẽ mở ra một ActivityB
khác.Android: Nhấn nút quay lại trong khi AsyncTask đang chạy
onCreate()
phương thức ActivityB
, Tôi bắt đầu AsyncTask
kết nối với máy chủ và tìm nạp kết quả và hiển thị kết quả đó trên màn hình.
Đây là Bộ luật của Activity B
:
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.
}
}
Trong khi thực hiện AsyncFetch
, khi tôi đánh lại báo chí, các ActivityB
là không nhận được tiêu huỷ ngay. Nhưng bị phá hủy sau khi hoàn thành AsyncTask
.
Làm cách nào để triển khai tính năng này để tránh báo chí bị đóng băng? Tôi đã thử bên dưới:
@Override
protected void onDestroy() {
asyncFetch.cancel(true);
super.onDestroy();
}
Nhưng vẫn đợi số AsyncTask
để hủy hoặc hoàn tất.
Giống như ứng dụng GMail
, khi tôi mở một cái gì đó. Trong khi trong quá trình nếu tôi nhấn nút quay lại, nó chỉ đi ra rằng Activity
.
Có cách nào khác để triển khai quy trình nền không? Bất kỳ design pattern
để thực hiện điều này? Làm ơn cho tôi biết.
Mọi trợ giúp đều được đánh giá cao.
bạn sẽ cần phản hồi đó từ máy chủ ngay cả khi đã nhấn phím backkey ?? – Elltz
AsyncTasks không chặn chuỗi giao diện người dùng nếu được triển khai chính xác. Đăng toàn bộ mã của bạn. – biegleux
Giao diện người dùng không bị chặn. nhưng Activity không bị phá hủy cho đến khi hoàn thành async. – User12111111