當對Dialog進行關閉時,若是有大量的操做,好比動畫、繪圖什麼的,就可能出現這樣的錯誤ide
Attempting to destroy the window while drawing! post
好比,我在自定義的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來解決spa
@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. blog
後來,我在下發評論中發現了post能夠直接解決,不用10mms的時間。因而就用了post。下面是最終解決問題後的代碼:get
@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); }