onDestroy() 中發送廣播後,報 Activity ... has leaked window ... DecorView。去掉廣播代碼則正常。
Dialog、ProgressDialog、PopupWindow)未 dismiss()。sendBroadcast() 可能觸發其他組件彈窗,或廣播接收器中異步彈窗,導致 Window 持有引用。@Override
protected void onDestroy() {
if (dialog != null && dialog.isShowing()) dialog.dismiss();
if (popupWindow != null && popupWindow.isShowing()) popupWindow.dismiss();
// 再發送廣播
sendBroadcast(new Intent(...));
super.onDestroy();
}
getApplicationContext().sendBroadcast(intent);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);(進程內,輕量)。runOnUiThread 或 Handler。onPause/onStop dismiss,onResume show。DialogFragment 替代原生 Dialog,系統自動管理生命周期。sendOrderedBroadcast + BroadcastReceiver。