应用程序暂停/恢复状态

7
我的问题是,当整个应用程序被暂停/恢复启动/停止等时,我能否知道。 例如,如果我的应用程序中有5个活动。每当任何活动被暂停/恢复,Android都会通过调用onPause/onResume方法通知该活动。
因此,当我的活动被暂停时,有两种可能的情况: 1. 我的活动2被暂停,因为我的活动3被调用了。 2. 我的活动2被暂停,因为有一些外部活动,比如来电。
在这里,我只关心跟踪我的活动被外部活动暂停的时间,而不是我的自己的应用程序活动。
那么,是否有Android提供的解决方案,还是我必须编写自定义解决方案?
谢谢 Dalvin
4个回答

10

由于在大多数情况下API不需要解决方案,因此API没有提供解决方案。

您可以创建一个抽象活动,并使所有的活动从这个抽象活动继承。在这个抽象活动中,通过重写 onCreate、onResume、onPause 和 onDestroy 方法,您可以管理计算有多少个您自己的活动处于"活动"状态,然后确定应用程序的状态。

这可能会起作用,但并不是 Android 的真正哲学。


2
如果您的应用程序打开另一个应用程序(例如相机或电子邮件),则此方法将无法正常工作。您需要逐个情况进行处理。 - SXC

3
你可以在application.oncreate()中了解整个应用程序的启动,但是没有整个应用程序暂停的指示器。大多数情况下都不需要它。

所以进一步阅读活动lifecycleapplication类。

仍然可以通过覆盖每个类中的onPause并将值保存到sharedPrefrences中来执行此选项,然后在整个应用程序中检查此值。


3
如果我理解你的问题正确,你希望你的应用程序能够区分在程序内退出当前活动还是由外部事件(如电话呼叫)退出。我过去使用过以下方法来实现这一点(虽然它可能不是最好的,但肯定有效):
(1)在SharedPreferences中设置一个值(用于存储程序数据的内置文件)。将其称为“exitStatus”,如果是程序代码内的退出,则设置为1,如果是基于外部事件的退出,则设置为0。
(2)现在,在每个活动中,在onResume中将exitStatus的值设置为0(无论如何进入都会调用此方法)。如果您的程序在该活动中由于外部事件而退出,则此值在重新加载程序时将保持不变。
(3)在活动结束时,在您要转移到另一个活动的所有点之前,首先将exitStatus设置为1。然后,当您到达另一个活动时,它将知道您是从程序内部到达的。
(4)因此,只是为了明确起见,您的每个活动都可以在开始时检查exitStatus,以查看您是从程序上下文中进入(= 1)还是经过某种非本地退出(= 0)进入。
就是这样。我使用此方法来确保我的应用程序的加载数据存在,因为如果用户关闭设备,则可能会丢失数据,因此当他们稍后重新启动等情况时,应用程序会尝试在中途恢复。

1

不需要创建基本活动和重写onPause/onResume方法,可以使用

registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)

在这里,您可以在一个地方处理应用程序活动的这些状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接