android.view.WindowLeakedの解決策
1156 ワード
ソース:
文字通り、Window Leakedはフォームが漏れている、つまり私たちがよく言っているメモリが漏れているということですが、なぜフォームが漏れているのでしょうか.原因:Androidの各ActivityにはWindowManagerフォームマネージャがあり、Activityの上に構築されたダイアログボックス、PopupWindowにも対応するWindowManagerフォームマネージャがあることがわかります.ダイアログ、PopupWindownはActivityから離れずに単独で存在しているので、あるDialogまたはあるPopupWindowが表示されている間にDialog(またはPopupWindow)を搭載したActivityをfinish()に行ったとき、このDialog(またはPopupWindow)のWindowManagerはすでに誰も付属していないので、Window Leaked異常を投げてしまいます.フォームマネージャが漏れています解決策:Activityを閉じる前に、上に付属するDialogまたはPopupWindowが閉じていることを確認します.
例:
教訓をくみ取る:
あるactivityでDialogまたはPopupWindowを宣言した場合、現在のactivityを閉じるときにこれらの状体が閉じていることを確認します.そうしないと、Window Leakedが発生します.
文字通り、Window Leakedはフォームが漏れている、つまり私たちがよく言っているメモリが漏れているということですが、なぜフォームが漏れているのでしょうか.原因:Androidの各ActivityにはWindowManagerフォームマネージャがあり、Activityの上に構築されたダイアログボックス、PopupWindowにも対応するWindowManagerフォームマネージャがあることがわかります.ダイアログ、PopupWindownはActivityから離れずに単独で存在しているので、あるDialogまたはあるPopupWindowが表示されている間にDialog(またはPopupWindow)を搭載したActivityをfinish()に行ったとき、このDialog(またはPopupWindow)のWindowManagerはすでに誰も付属していないので、Window Leaked異常を投げてしまいます.フォームマネージャが漏れています解決策:Activityを閉じる前に、上に付属するDialogまたはPopupWindowが閉じていることを確認します.
例:
@Override
protected void onDestroy() {
super.onDestroy();
if (mDialog != null) {
mDialog.dismiss();
}
}
教訓をくみ取る:
あるactivityでDialogまたはPopupWindowを宣言した場合、現在のactivityを閉じるときにこれらの状体が閉じていることを確認します.そうしないと、Window Leakedが発生します.