我知道Android没有应用程序级onPause,因为Activity有onPause,但看起来我需要类似的功能。我前一段时间问了一个(愚蠢的)问题(http://stackoverflow.com/questions/9508301/checking-the-manner-in-which-an-activity-has-been-reanimated)并意识到onPause / onResume会给出我正在寻找的东西:能够知道活动是否已降级到后台(通过主页按钮,打开不同的应用程序,手机睡眠等)。
麻烦的是,当我从我的应用程序中的一个Activity转到另一个Activity时,onPause也会在Activity中触发。因此,我正在寻找用户可以在我的应用程序中从“活动”变为“活动”的各种方式(并且有15到25之间的任何地方),并在每个用户启动的Activity切换之前设置标记。然后在onResume我正在检查那个标志,如果它是X,我知道它是一个用户启动的onResume。如果标志是Y,我知道这是按下Home按钮,手机睡眠等的结果。)
这看起来像是一个混乱的大杂烩。有没有更好的办法?
(我添加这个是为了帮助,而不是混淆:我的目标是有一个(非常烦人的,我知道)密码屏幕,当应用程序因任何原因(甚至屏幕睡眠)离开前台时弹出。我计划使用onPause / onResume来检查何时弹出Passcode活动,但每次更改活动时onPause都会触发,因此我需要添加更多。)
答案 0 :(得分:0)
这并没有真正回答你的问题,但也许作为一种替代方法,你是否可以创建一个活动基类来执行标记管理并让你的所有活动继承自那个?你甚至可以做一些事情,例如在一个活动的onPause和另一个活动的onResume之间设置一个5秒的超时,以决定你是在做一个应用程序外的开关,而不是一个应用程序内的开关,尽管如果你只有一个您从活动基类调用的用于启动活动更改的实用程序功能,它仍然大大减少了您必须跟踪事物的表面区域。
答案 1 :(得分:0)
我可能会误解你,但另一种方法是改变你的方法:每当你在一个应用程序中从一个屏幕更改为另一个屏幕时,你要么启动Intent要么完成()(例如当用户时)按下后退按钮),对吧?
然后你可以在你的内部Intents中设置一个标志,每当你直接调用finish()或在你的应用程序中调用onBackPressed()时,你可以设置一个类似的标志。如果在您的应用中运行onResume()时未设置该标志,则可以显示锁屏。
答案 2 :(得分:0)
您应该将onPause()函数与应用程序可见性状态结合使用,并在应用程序不可见时进一步处理。以下代码可能有所帮助:
private boolean isVisible(String app) {
ActivityManager activityManager = (ActivityManager) getApplicationContext()
.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> appProcesses = activityManager
.getRunningAppProcesses();
for (RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_VISIBLE) {
Log.i("Foreground App", appProcess.processName);
if (app.equalsIgnoreCase(appProcess.processName)) {
return true;
}
}
}
return false;
}
同样,这可能完全不适合您当前的情况。