Android应用程序会话管理

时间:2011-10-19 06:07:15

标签: android session

我必须在我的应用程序中维护基于会话的统计信息。问题是即使用户使用后退按钮退出应用程序,android也永远不会关闭应用程序(可能是因为我在后台运行服务)。

如果应用程序在后台处理X分钟(以区别于电话或闹钟),我想重置会话信息。有没有办法做到这一点?

可能是某种广播接收器来检测事件......?

让我试着稍微解释一下这个场景。我的应用程序的这部分只有在身份验证(输入密码)后才能访问。现在,一旦用户进入此部分,我就不希望每次活动暂停时都要求用户进行身份验证。但是说用户按下Home键并在说完20分钟后返回应用程序,我想要求进行身份验证。

编辑:我正在处理多项活动,因此我无法在onPause()中设置标记时检测到应用程序进入后台。

2 个答案:

答案 0 :(得分:4)

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包中的活动,那么你就不会进入后台。这确实需要GET_TASKS权限,如果活动出现而没有你退出它仍会触发(用户从通知栏中选择某些东西)。

或绑定到服务onStart&amp; unbind onStop - 当你的所有活动都停止时,服务将被onDestroyed(如果你不想依赖onDestroyed被调用,那么跟踪绑定vs unbinds - 因为它可能不会......)。

答案 1 :(得分:0)

我不完全确定,但我认为当用户使用后退按钮存在应用程序时,您的应用程序会关闭(除非您正在捕获其他内容或在后台运行其他共享相同会话首选项的服务。

反正...

要回答您的问题,有两种简单的方法可以做您想做的事情:

  1. 尝试Flurry。它做得非常好。或Google Analytics for Mobile,它们都非常易于使用,并且可以为您处理这些内容。

  2. 如果要进行后台检查,只需在活动的onPause()块中记录SharedPreference,当应用程序中的新屏幕出现时刷新它,同时检查是否旧的已经过期(这将发生在onResume())。