Mam działanie, które uruchamia AsyncTask i pokazuje okno dialogowe postępu na czas trwania operacji. Zadeklarowano, że aktywność NIE jest odtwarzana przez obrót lub przesuwanie klawiatury.
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
Po zakończeniu zadania zamykam okno dialogowe, ale na niektórych telefonach (framework: 1.5, 1.6) wyrzuca taki błąd:
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ój kod to:
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();
Z tego, co przeczytałem ( http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html ) i widziałem w źródłach Androida, wygląda na to, że jedyna możliwa sytuacja to wyjątkiem jest sytuacja, gdy aktywność została zniszczona. Ale jak wspomniałem, zabraniam rekreacji ruchowej na podstawowe imprezy.
Dlatego wszelkie sugestie są bardzo mile widziane.