Trong ứng dụng của tôi, tôi đang hiển thị hộp thoại trong quá trình nền chạy dài, là phương thức.
Hộp thoại này bị loại bỏ khi trả về android từ tác vụ nền.Kiểm tra xem hộp thoại có thể được loại bỏ một cách an toàn
final ProgressDialog progressDialog = ProgressDialog.show(activity, "", "Doing something long running", true, true);
new Thread(new Runnable() {
public void run() {
someLongRunningCode(); // (not using AsyncTask!)
activity.runOnUiThread(new Runnable() {
public void run() {
progressDialog.dismiss();
}
});
}
}).start();
Bây giờ, khi người dùng xoay thiết bị của mình trong khi quá trình nền vẫn chạy hoạt động được tái tạo và do đó, tiến trình được tách ra khỏi hoạt động.
Khi quá trình chạy dài được thực hiện, android rõ ràng sẽ cố gắng ẩn hộp thoại tiến trình (hiện đã tách rời) và sau đó dẫn đến một ngoại lệ: java.lang.IllegalArgumentException: View not attached to window manager
.
Có cách nào để kiểm tra xem có an toàn khi loại bỏ hộp thoại không?
Chỉnh sửa: Hoặc vẫn tốt hơn, có cách nào để đính kèm hộp thoại hiện có vào hoạt động mới được tạo không?
Một hộp thoại nhân bản mới sẽ vẫn ổn.
Thực ra, giải pháp tốt nhất cho tôi là nếu có cách nào để đính kèm hộp thoại hiện có vào hoạt động mới được tạo ra, vì nhiệm vụ có thể vẫn đang chạy. Có cách nào làm được việc này không? Cũng cập nhật câu hỏi của tôi để phản ánh điều đó. – PureSpider
Nếu bạn không sử dụng bố cục/hình vẽ riêng cho cảnh quan và dọc, bạn chỉ có thể ghi đè lên configChange trong tệp kê khai của mình cho hoạt động để nó không phá hủy hoạt động (nó vẫn xoay và thay đổi kích thước mọi thứ cho bạn một cách chính xác). Các tùy chọn khác sẽ yêu cầu rất nhiều công việc xung quanh onSaveInstanceState và onRestoreInstanceState, và bạn cần phải rất cẩn thận về vấn đề thời gian nếu thread thực sự kết thúc trong thời gian đó. –
Phương pháp đó được khuyến khích bởi google mặc dù ... tại sao? – PureSpider