回复“onMoveToBackground”& “onMoveToForeground”& “onAppClosed”

时间:2013-08-06 18:42:58

标签: android android-activity activity-lifecycle

如何在Android应用中识别这些事件?

据我所知,最接近的解决方案是这里介绍的解决方案: https://stackoverflow.com/a/15573121/558433

但是,这也无法识别appClose(并且是基于时间的解决方法= /)。

我认为主要活动onDestroy可能是“退出点”,但该方法通过Activity生命周期多次调用(在Activity事务之间等等)。

这就是问题,我怎样才能认出这些事件: 应用程序移至后台(按下此主页按钮); 应用程序移动到Foreground(活动在后台从堆栈恢复); 申请完全结束(可能是对第一项活动的最终破坏); 应用程序在后台关闭(例如来自用户操作或Android系统);

提前致谢!

1 个答案:

答案 0 :(得分:0)

onAppClose没有回电。

无论您是在应用中开始新活动,还是用户进入主屏幕并返回应用,活动都会经历相同的生命周期。

您可以执行一些变通方法。

这个图书馆可能很有意思 - https://github.com/curioustechizen/android-app-pause。它为onAppPause和onAppResume添加了应用程序类的回调。它不适用于我的目的。

通过在应用程序类中存储活动活动的当前类名,我设法很好地检测到应用程序从后台恢复的时间。

每当恢复活动时,我都会检查存储的活动类(即前一个活动类)是否与正在恢复的活动类相同。

如果它是相同的,那么我们可以假设应用程序正在从后台恢复。如果它是不同的类名,则表示用户正在导航到应用内的其他活动。

还有一个标记可以设置为从历史记录(最近的应用列表)启动活动时的意图。

这是我在活动onResume方法中使用的代码:

if (((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) > 0 || MyApplication.getInstance().isActivityResumedFromBackground(){
//activity is being resumed from background
}

isActivityResumedFromBackground是我的应用程序类的自定义方法,如上所述,检查新活动的类名是否与旧活动的类名匹配。