我必须在我的应用程序中维护基于 session 的统计信息。问题是即使用户使用后退按钮退出应用程序,android 也永远不会关闭应用程序(可能是因为我在后台运行服务)。
如果应用程序在后台运行 X 分钟(以区别于打电话或闹钟),我想重置我的 session 信息。有什么办法吗?
也许是某种广播接收器来检测事件......?
让我试着解释一下这个场景。我的应用程序的这一部分只能在身份验证(输入密码)后才能访问。现在,一旦用户进入此部分,我就不想在每次 Activity 暂停时都继续要求用户进行身份验证。但是假设用户按下 Home 键并在 20 分钟后返回到应用程序,我想请求身份验证。
编辑:我正在处理多个 Activity ,所以我无法检测到应用程序进入后台,只是在 onPause()
中设置一个标志。
最佳答案
private static boolean isApplicationGoingToBackground(final Context context) {
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
调用 onStop。 onStop 在 onStart 之后被调用,无论什么接管屏幕 - 如果它是同一个 apk 包中的 Activity ,那么你就不会进入后台。这确实需要 GET_TASKS 权限,如果在您没有退出的情况下出现 Activity ,它仍会触发(用户从通知栏或其他内容中选择某些内容)。
或者绑定(bind)到服务 onStart 和取消绑定(bind) onStop - 当你所有的 Activity 都停止时,服务将被 onDestroyed (或者如果你不想依赖 onDestroyed 被调用,则跟踪绑定(bind)与取消绑定(bind) - 因为它可能不会.. ).
关于Android应用 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7817193/