3 回答
TA贡献1797条经验 获得超4个赞
作出这样一个全局变量private boolean mIsInForegroundMode;和分配false的价值onPause()和true价值onResume()。
样例代码:
private boolean mIsInForegroundMode;
@Override
protected void onPause() {
super.onPause();
mIsInForegroundMode = false;
}
@Override
protected void onResume() {
super.onResume();
mIsInForegroundMode = true;
}
// Some function.
public boolean isInForeground() {
return mIsInForegroundMode;
}
TA贡献1719条经验 获得超6个赞
这是一篇很老的文章,但仍然很有用。以上接受的解决方案可能有效,但有误。正如Dianne Hackborn写道:
这些API并不是应用程序用来建立UI流程的基础,而是用于向用户显示正在运行的应用程序或任务管理器等。
是的,在内存中有一个列表保存这些事情。但是,它在另一个进程中处于关闭状态,由与您的线程分开运行的线程进行管理,而不是您可以依靠的东西(a)及时看到正确的决定,或者(b)在返回时保持一致。加上关于“下一步”活动去的决定总是在切换发生的那一刻完成,直到直到那个确切的点(活动状态被短暂锁定以进行切换),我们才能做出决定真的知道接下来会发生什么。
并且这里的实现和全局行为不能保证将来保持不变。
正确的解决方案是实施:ActivityLifeCycleCallbacks。
这基本上需要一个应用程序类,并且可以在其中设置处理程序以标识您在应用程序中的活动状态。
- 3 回答
- 0 关注
- 1310 浏览
添加回答
举报