আমার একটি ক্রিয়াকলাপ রয়েছে যা অ্যাসিঙ্কটাস্ক শুরু করে এবং অপারেশনের সময়কালের জন্য অগ্রগতি ডায়ালগ দেখায়। ক্রিয়াকলাপটি ঘোরানো বা কীবোর্ড স্লাইড দ্বারা পুনরায় তৈরি করা হবে না বলে ঘোষণা করা হয়।
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation"
>
<intent-filter>
</intent-filter>
</activity>
টাস্ক শেষ হয়ে গেলে, আমি ডায়লগটি ছড়িয়ে দেব, তবে কিছু ফোনে (ফ্রেমওয়ার্ক: 1.5, 1.6) এ জাতীয় ত্রুটি নিক্ষেপ করা হয়:
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)
আমার কোডটি হ'ল:
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();
আমি যা পড়েছি ( http://bend-ing.blogspot.com/2008/11/properly-handle-progress-dialog-in.html ) এবং অ্যান্ড্রয়েড উত্সগুলিতে দেখেছি তা এটিকে পাওয়ার একমাত্র সম্ভাব্য পরিস্থিতি বলে মনে হচ্ছে ব্যতিক্রম হ'ল যখন কার্যকলাপটি ধ্বংস হয়ে যায় was তবে আমি যেমনটি উল্লেখ করেছি, আমি মৌলিক ইভেন্টগুলির জন্য ক্রিয়াকলাপ বিনোদনকে নিষেধ করি।
সুতরাং কোন পরামর্শ খুব প্রশংসা করা হয়।