當對Dialog進行關閉時,如果有大量的操作,比如動畫、繪圖什么的,就可能出現這樣的錯誤
Attempting to destroy the window while drawing!
比如,我在自定義的Dialog中的dismiss中進行了這樣的操作,然后就報錯了。其實可以忽略的,但畢竟不爽。
@Override public void dismiss() { Animation anim = AnimationUtils.loadAnimation(context, R.anim.dialog_main_hide_amination); anim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { Dialog.super.dismiss(); } }); Animation backAnim = AnimationUtils.loadAnimation(context, R.anim.dialog_root_hide_amin); view.startAnimation(anim); backView.startAnimation(backAnim); }
通過Google查到了解決辦法。——通過handler來解決
@Override public void onAnimationEnd(Animation animation) { Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { dismiss(); } }, 10);
You don't need the 10 ms delay. You can simply use the post()
method.
后來,我在下發評論中發現了post可以直接解決,不用10mms的時間。於是就用了post。下面是最終解決問題后的代碼:
@Override public void dismiss() { Animation anim = AnimationUtils.loadAnimation(context, R.anim.dialog_main_hide_amination); anim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { view.post(new Runnable() { @Override public void run() { Dialog.super.dismiss(); } }); } }); Animation backAnim = AnimationUtils.loadAnimation(context, R.anim.dialog_root_hide_amin); view.startAnimation(anim); backView.startAnimation(backAnim); }