Sử dụng trường hợp:Xử lý thay đổi hướng với chạy AsyncTask
Người dùng bắt đầu ứng dụng đó sẽ được tải một hình ảnh xác thực. Người dùng điền vào hình ảnh xác thực và cố tải xuống một số thông tin.
Vấn đề:
Nếu người dùng xoay thiết bị trong khi tải các Activity
bị phá hủy. Khi kết thúc việc thực hiện AsyncTask đang cố gắng cập nhật Activity
bị hủy và kết quả là "Chế độ xem không được đính kèm với trình quản lý cửa sổ".
"Wrong" giải pháp:
tôi có thể che dấu vấn đề với một android:configChanges="orientation|keyboardHidden|screenSize"
nhưng với cách bố trí này sẽ không được cập nhật để cảnh quan.
Những gì tôi hỏi:
Có thể thay đổi hướng và thay đổi "tham khảo" của bối cảnh truyền cho AsyncTask
?
Điều này answer đề xuất kiểm tra xem hộp thoại có không phải là không, nhưng không phải là những gì tôi đang tìm kiếm.
Here anh ấy đề nghị sử dụng WeakReference (here một đoạn trích đẹp về cách sử dụng nó) nhưng tôi không hiểu đó có phải là điều tôi đang tìm kiếm hay không.
Để rõ ràng hơn đây là những gì tôi đang làm trong onPostExecute:
@Override
protected void onPostExecute(Auto result) {
progress.dismiss();
new DownloaderCaptcha(context).execute("");
((EditText)context.findViewById(R.id.editTextCaptcha)).setText("");
context.findViewById(R.id.progrBar).setVisibility(View.VISIBLE);
context.findViewById(R.id.captcha).setVisibility(View.INVISIBLE);
if(result != null) {
Storage.storeHistory(context, result.getTarga().getValue());
Intent i = new Intent(context, MenuActivity.class);
i.putExtra("result", result);
context.startActivity(i);
} else {
ErrorDialog.show(context, error);
}
}
Đó không phải là câu trả lời hay nhất nhưng bạn có thể giữ ref trên asyncTask và chuyển nó vào hoạt động phong cảnh của mình. Các hoạt động cảnh quan sau đó sẽ cập nhật bối cảnh asynctask ... Nhưng tôi không biết điều gì sẽ xảy ra nếu ascncTask của bạn kết thúc trong quá trình chuyển đổi hoạt động (nhưng có những giải pháp đơn giản cho vấn đề này). – Xval
@matiash: không cần phải downvote, cũng bởi vì nếu bạn nhìn vào thời điểm khi câu trả lời đã được đăng, nó đã được ngay sau khi Alex đăng bài này! Vì vậy, vào thời điểm đó không có câu trả lời hay cho câu hỏi của tôi. Rõ ràng bạn có thể gắn cờ nó như là một bản sao, nhưng một downvote có nghĩa là một thiếu nghiên cứu, không phải trường hợp của tôi tôi đoán. Chỉ cần hai xu của tôi. – Enrichman
@Enrichman Tôi đã không downvote nó. Tôi đồng ý đó là một câu hỏi hay, nó chỉ là một bản sao. – matiash