【发布时间】:2016-02-24 11:16:42
【问题描述】:
我正在寻找如何知道我的应用是在前台还是后台。我已经看到了两种可能的解决方案,但我不确定哪个更好(如果有更好的解决方案)。
解决方案 1: 在我的应用程序类上创建两个计数器:
private int mResumedActivities = 0;
private int mPausedActivities = 0;
并在每个 onResume/onPause 上增加每个计数器,这样我就可以检查应用程序是否在后台:
public boolean isInBackground() {
return mPausedActivities >= mResumedActivities;
}
解决方案 2: 在我的应用程序类中创建两个布尔值: 私有布尔 isAppResumed = false; 私有布尔 isAppInForeground = false;
并且在每个 onResume/onPause 上更新 isAppResumed 并且在每个 onResume 上设置 isAppInForeground 并且在每个 onPaused 上触发一个延迟处理程序,因此,如果在几毫秒后应用程序仍然暂停,则将 isAppInForeground 更新为 true。
我认为第一个解决方案更简单,但我不喜欢有两个可能永远递增的计数器。而且,onPause 会先被调用,然后是 onResume,所以会有几毫秒的时间,app 可能会认为这是在前台,而实际上不是。 你怎么看?
提前谢谢你!
【问题讨论】:
-
那么你到底在哪里需要这个值呢?通常一个普通的开发者是怎么做的,在他想知道应用程序是否在前台的任何活动/片段中,他都会引入一个名为 isAcitivtyForeground 或 isFragmentForeground 的新片段/活动变量,并在 onPause 中将其设置为 false,在 onResume 中将其设置为 true
-
我想从另一个服务或单例中检查它,完全独立于片段/活动。
标签: android performance android-lifecycle