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

Android AlertDialog 與 PopupWindow 不觸發 onPause/onStop 的條件分析

     編輯:程式設計綜合問答

結論

非全螢幕 Dialog/Window 不會觸發 Activity 的 onPause/onStop,Activity 仍保持 Resumed 狀態。

詳細規則

類型全螢幕onPauseonStop說明
Activity是✅✅ (被覆蓋)標準生命週期
Dialog (預設)否❌❌Activity 仍可見
Dialog (全螢幕主題)是✅❌ (通常)視窗覆蓋但非 Activity
PopupWindow否❌❌浮層,不影響 Activity 狀態
PopupWindow (fullscreen)是✅❌罕見用法

原理

  • Activity 生命週期由 **ActivityManagerService (AMS)** 根據**視窗遮擋關係**判斷。
  • 非全螢幕 Dialog/PopupWindow 屬於**同一 Activity 視窗令牌**下的子視窗,不改變 Activity 可見性。
  • 全螢幕 Dialog 使用獨立視窗令牌並設定 FLAG_FULLSCREEN,AMS 視為遮擋觸發 onPause。

驗證方法

@Override protected void onPause() { Log.d("TAG", "onPause"); super.onPause(); }
@Override protected void onStop()  { Log.d("TAG", "onStop");  super.onStop();  }

分別彈出普通 Dialog、全螢幕 Dialog、PopupWindow 觀察 Logcat。

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