如何在考虑对话框和系统窗口的情况下可视化地跟踪活动



一项任务:我应该跟踪整个Android应用程序的可见性,并在它进入后台或前台时生成事件。任务的第一部分完成了:我有一个特殊的全局计数器,我在ActivityonStart()中递增,在ActivityonStop()中递减,当这个计数器降到零时,我的应用程序就进入了后台。

任务的第二部分是骗子。我知道onResume()的奇怪行为,以及使用onWindowFocusChanged(布尔值)nWindowFocusChanged(布尔值)的文档,注意到了这样一件事:

然而,一般来说,恢复的活动将具有窗口集中除非它显示了其他对话框或弹出窗口输入焦点,在这种情况下活动本身将没有焦点当其他窗口有它时。同样,系统可能会显示系统级窗口(如状态栏通知面板或系统警报),它将在没有暂停前台活动。

有没有办法结账:谁的窗口显示在我的应用程序中恢复的活动上?是我的对话还是键盘保护?有没有办法捕捉事件:除了恢复活动的窗口外,所有窗口都被删除了?

基于计数器的方法完全错误。原因之一是:onStop()不能保证执行。

我认为你对"背景"one_answers"前景"的概念应该与安卓系统的概念相同。然而,当我读到你迄今为止所做的事情时,你似乎对"背景"one_answers"前景"的含义有着与安卓不同的想法。

从那里:

  • 如果你知道背景和前景的含义,这与Android不同,那么你并没有帮自己一个忙,可能会走上一条被误导的道路,所以建议调整前景和背景的含义
  • 一旦你对背景和前景有了和安卓相同的想法,问题是,既然安卓已经这样做了,为什么还要生成事件。如果您必须将事件发送到服务或类似的服务,那么只需侦听"活动"生命周期事件并为您的服务触发相应的事件就可以了

关于onWindowFocusChanged:是的,当然通知面板可以暂时隐藏您的应用程序;你用过安卓设备吗?这里的大问题是,如果显示通知面板,安卓系统会认为你的应用程序在后台。

更新:我刚刚重读了你的Q的标题。不幸的是,您并没有说明您真正想要/需要做什么,因为可见性可能意味着很多事情。例如,如果你的应用程序上有半透明的通知面板,你认为它是可见的吗?但底线是不变的:如果你把你想要的东西与安卓系统提供的东西保持一致,那将是最容易的。)

更新2:如果你真的需要知道你的活动是通过你自己的活动弹出窗口还是自己移动到后台的,这里的答案应该会给你所需的信息。

相关内容

最新更新