Ich habe eine Aktivität, die AsyncTask startet und den Fortschrittsdialog für die Dauer des Vorgangs anzeigt. Die Aktivität wird als NICHT durch Drehen oder Schieben der Tastatur neu erstellt deklariert.
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
Sobald die Aufgabe abgeschlossen ist, entlasse ich den Dialog, aber auf einigen Telefonen (Framework: 1.5, 1.6) wird ein solcher Fehler ausgegeben:
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)
Mein Code lautet:
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();
Nach dem, was ich gelesen ( http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html ) und in Android-Quellen gesehen habe, scheint es die einzig mögliche Situation zu sein, dies zu erreichen Ausnahme ist, wenn die Aktivität zerstört wurde. Aber wie ich bereits erwähnt habe, verbiete ich die Erholung von Aktivitäten für grundlegende Ereignisse.
Vorschläge sind daher sehr willkommen.