我的问题是,我可以了解整个应用程序何时暂停/恢复启动/停止等。 例如,如果我的应用程序中有5个活动。每当任何活动被暂停/恢复时,android通过调用onPause / onResume方法通知活动。
因此,当我的活动暂停时,有两种可能的情况。 1.我的activity-2被暂停,因为我的activity-3被调用了。 2.由于来电等一些外部活动,我的活动-2暂停了。
我感兴趣的是,只有当我的活动被外部活动而不是我自己的应用程序活动暂停时才会跟踪。
那么是否有任何Android提供的解决方案,或者我必须编写我的自定义解决方案。
由于 Dalvin
答案 0 :(得分:10)
API没有提供解决方案,因为在大多数情况下不需要它。
您可以做的是创建一个抽象活动,并使所有活动继承自这个抽象活动。 在这个抽象活动中,通过覆盖onCreate,onResume,onPause,onDestroy,您可以设法计算自己的活动有多少“活着”,然后确定应用程序的状态。
这可行,但它并不是真正的Android哲学
答案 1 :(得分:3)
您可以在application.oncreate()
知道整个应用程序的启动,但没有指示整个应用程序暂停。无论如何,大多数情况都不需要它。
请继续阅读活动lifecycle和application类。
您仍然可以在程序中通过覆盖每个类中的onPause并将值保存到sharedPrefrences然后在整个应用程序中检查此值来执行此选项
答案 2 :(得分:3)
如果我理解了您的问题,您希望您的应用能够区分退出程序环境中的当前活动或外部事件(如电话)。我过去使用过以下方法来做到这一点(虽然它可能不是最好的,但它确实有效):
(1)在SharedPreferences(用于存储程序数据的内置文件)中设置一个值。称之为“exitStatus”,对于程序代码中的退出设置为1,对于基于外部事件的退出设置为0。
(2)现在,在每个活动中,在onResume中将exitStatus的值设置为0(无论你如何输入,都会调用它)。如果您的程序由于该活动中的外部事件而退出,则在重新加载程序时该值将保持不变。
(3)在活动结束时,在您要转移到另一个活动的所有点上,首先将exitStatus设置为1.然后,当您到达另一个活动时,它将知道您从那里到达在你的计划中。
(4)因此,为了清楚起见,您的每个活动都可以在开始时检查exitStatus,以查看您是从程序上下文(= 1)中输入还是在某种非本地退出后输入(= 0)。
这就是它的全部。我使用这种方法来确保我的应用程序的加载数据存在,因为如果用户关闭他们的设备可能会丢失,以便应用程序在以后重新启动时尝试在事情的中间拾取等等。
答案 3 :(得分:1)
您可以使用
而不是制作基本活动并覆盖onPause / onResumeregisterActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)
您可以在一个地方处理应用程序活动的这些状态。