检测应用程序是否位于前台有很多原因。
例如 - 作为 GCM/C2DM 推送通知的触发器 - 许多应用程序有充分的理由在应用程序处于前台和后台时实现不同的行为。
其他原因可能是 - 关闭消耗宝贵资源的服务,例如在后台任务中查询服务器。
需要明确的是:后台应用程序的定义(据我所知)是:
没有任何活动被调用的应用程序onStart()
方法,并且还没有调用onStop()
方法。
这是因为活动仅在此时对其生命周期中的用户可见。
从另一方面 -
似乎 Google 不希望应用程序对主页按钮做出反应(它不是 API 的一部分)
做出反应onBackPressed()
将“根/主要”活动作为离开的指标Activity
当然不是好主意(因为很多用户使用主页按钮,而不是后退按钮)
API 中没有方法允许确定应用程序是否为前台(根据我的定义..)
如果我没有错过 API 中的某些内容,情况确实如此 -为什么没有为什么可以轻松确定应用程序是否为前台???!!!!!!
我知道我能做什么此线程中描述了确定应用程序是否为前台的方法 -如何检测 Android 应用程序何时进入后台并返回前台
但正如@Emil所说 - 它需要特殊许可,或者需要一些棘手的逻辑,这很快就会成为维护问题,而且闻起来像是糟糕的方法(尽管这就是我现在正在做的事情,因为我没有更好的主意。 ..)
我的问题基本上是:
难道没有这样的 API 方法是有充分理由的吗?
考虑应用程序是否是前台是一个坏方法吗?
还有其他方法可以知道应用程序是否在前台吗?
考虑应用程序是否是前台是一个坏方法吗?
考虑前景与背景是合理的。
还有其他方法可以知道应用程序是否在前台吗?
您可以粗略地将这种情况分为两组:
您希望在前台/后台状态发生变化时立即采取行动的情况
发生其他事件的情况(AlarmManager
警报、传入系统广播等),此时您希望根据您是否在前台采取不同的操作
在前一种情况下,onUserLeaveHint()
是您最可靠的简单选择。我不能保证它涵盖所有情况,但它应该处理家庭场景,例如。还欢迎您在静态数据成员中维护已启动活动的引用计数,并尝试使用它。
在后一种情况下,有序广播可能有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)