AsyncTask başlatan ve işlem süresi için ilerleme iletişim kutusu gösteren bir etkinlik var. Etkinlik, döndürme veya klavye slaydı ile yeniden OLUŞTURULMADI bildirilir.
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
Görev tamamlandığında, iletişim kutusunu kapatırım, ancak bazı telefonlarda (çerçeve: 1.5, 1.6) bu hata atılır:
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)
Kodum:
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();
Okuduğumdan ( http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html ) ve Android kaynaklarında gördüğümden, bunu elde etmek için olası tek durum gibi görünüyor istisna, faaliyetin yok edildiği zamandır. Ancak daha önce de belirttiğim gibi, temel etkinlikler için aktivite rekreasyonunu yasaklıyorum.
Yani herhangi bir öneri çok takdir edilmektedir.