J'ai une activité qui commence AsyncTask et montre la boîte de dialogue de progression pour la durée de l'opération. L'activité est déclarée ne PAS être recréé par la rotation du clavier ou de la diapositive.
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
Une fois la tâche terminée, je dissmiss boîte de dialogue, mais sur certains téléphones (cadre: 1.5, 1.6) cette erreur est renvoyée:
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)
Mon code est:
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();
De ce que j'ai lu (http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html) et vu dans Android sources, il semble que la seule situation possible pour obtenir que l'exception est lorsque l'activité a été détruit. Mais comme je l'ai mentionné, je défends l'activité de loisirs pour les événements de base.
Donc, toutes les suggestions sont grandement appréciés.