Tôi có một hoạt động khởi động AsyncTask và hiển thị hộp thoại tiến trình trong thời gian hoạt động. Hoạt động được khai báo KHÔNG được tạo lại bằng cách xoay hoặc trượt bàn phím.
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
Khi tác vụ hoàn thành, tôi từ chối hộp thoại, nhưng trên một số điện thoại (khung: 1.5, 1.6) lỗi đó được đưa ra:
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201)
at android.view.Window$LocalWindowManager.removeView(Window.java:400)
at android.app.Dialog.dismissDialog(Dialog.java:268)
at android.app.Dialog.access$000(Dialog.java:69)
at android.app.Dialog$1.run(Dialog.java:103)
at android.app.Dialog.dismiss(Dialog.java:252)
at xxx.onPostExecute(xxx$1.java:xxx)
Mã của tôi là:
final Dialog dialog = new AlertDialog.Builder(context)
.setTitle("Processing...")
.setCancelable(true)
.create();
final AsyncTask<MyParams, Object, MyResult> task = new AsyncTask<MyParams, Object, MyResult>() {
@Override
protected MyResult doInBackground(MyParams... params) {
// Long operation goes here
}
@Override
protected void onPostExecute(MyResult result) {
dialog.dismiss();
onCompletion(result);
}
};
task.execute(...);
dialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
task.cancel(false);
}
});
dialog.show();
Từ những gì tôi đã đọc ( http://bend-ing.blogspot.com/2008/11/properly-handle-proTHER-dialog-in.html ) và thấy trong các nguồn Android, có vẻ như tình huống duy nhất có thể có được đó ngoại lệ là khi hoạt động bị phá hủy. Nhưng như tôi đã đề cập, tôi cấm hoạt động giải trí cho các sự kiện cơ bản.
Vì vậy, bất kỳ đề xuất đều rất đánh giá cao.