Tengo una actividad que inicia AsyncTask y muestra el diálogo de progreso durante la duración de la operación. La actividad se declara como NO recreada mediante rotación o deslizamiento del teclado.
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
Una vez que se completa la tarea, descarto el diálogo, pero en algunos teléfonos (framework: 1.5, 1.6) se produce dicho error:
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)
Mi código es:
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();
Por lo que he leído ( http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html ) y visto en las fuentes de Android, parece que la única situación posible para obtener eso La excepción es cuando la actividad fue destruida. Pero como he mencionado, prohíbo la recreación de actividades para eventos básicos.
Entonces cualquier sugerencia es muy apreciada.