首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Window.OnWindowDismissedCallback 觸發時機深度解析

     編輯:程式設計綜合問答

直接回答

Window.OnWindowDismissedCallback 在 Window 被關閉/移除時 觸發,典型場景包括:

  • 用戶點擊 返回鍵 導致 Dialog/PopupWindow/Activity 關閉。
  • 調用 dialog.dismiss()、popupWindow.dismiss()、activity.finish()。
  • 系統因配置變更(如旋轉)重建 Window 時,舊 Window 被移除。

源碼追蹤

// WindowManagerService.java
void removeWindow(WindowState win) {
    ...
    if (win.mAttrs.type == TYPE_APPLICATION) {
        // 觸發 OnWindowDismissedCallback
        win.mCallbacks.onWindowDismissed();
    }
}

常見誤區

  • 「只有硬件按鍵觸發」:代碼調用 dismiss() 同樣觸發,與輸入設備無關。
  • 「Home 鍵觸發」:Home 鍵僅將任務移至後台,Window 仍存在,不觸發此回調。

實戰應用場景

  1. 資源釋放:在回調中釋放 MediaPlayer、Camera、傳感器等獨佔資源。
  2. 數據持久化:Dialog 輸入內容未保存時,攔截關閉事件提示用戶。
  3. 動畫銷毀:協調共享元素轉場動畫結束後再移除 Window。

注意事項

回調運行在 UI 線程,耗時操作需異步處理;不要在回調中彈出新 Dialog,易導致 Window 管理器死鎖。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved