一项任务:我应该跟踪整个 Android 应用程序的可见性,并在它进入后台或前台时生成事件。任务的第一部分已完成:我有特殊的全局计数器,我在 Activity onStart() 中递增并在 Activity onStop()中递减,当此计数器降至零时,我的应用程序已进入后台。
任务的第二部分是诡计多端的。我知道onResume()的奇怪行为以及使用onWindowFocusChanged(boolean)的建议。我查看了onWindowFocusChanged(boolean)的文档并注意到这样的事情:
但是,作为一般规则,恢复的活动将具有窗口焦点...除非它显示了其他对话框或获取输入焦点的弹出窗口,在这种情况下,当其他窗口具有焦点时,活动本身将没有焦点。同样,系统可能会显示系统级窗口(例如状态栏通知面板或系统警报),这些窗口将暂时获取窗口输入焦点,而不会暂停前台活动。
有什么方法可以检查:谁的窗口显示在我的应用程序恢复的活动上?是我的对话还是键盘保护?有什么方法可以捕捉事件:除了我的恢复活动的窗口之外的所有窗口都被删除了吗?