Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android应用程序会话管理_Android_Session - Fatal编程技术网

Android应用程序会话管理

Android应用程序会话管理,android,session,Android,Session,我必须在应用程序中维护基于会话的统计信息。问题是,即使用户使用后退按钮退出应用程序,android也不会关闭应用程序,这可能是因为我在后台运行服务 如果应用程序在后台运行了X分钟,我想重置会话信息,以区别于电话或闹钟。有办法吗 也许是某种广播接收器来检测事件 让我试着解释一下这个场景。我的应用程序的这一部分只有在输入密码进行身份验证后才能访问。现在,一旦用户进入这个部分,我就不想每次暂停活动时都要求用户进行身份验证。但是假设用户按下Home键,然后在20分钟后返回应用程序,我想请求验证 编辑:我

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

如果应用程序在后台运行了X分钟,我想重置会话信息,以区别于电话或闹钟。有办法吗

也许是某种广播接收器来检测事件

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


编辑:我正在处理多个活动,因此我无法仅在onPause中设置一个标志就检测到应用程序进入后台。

我不完全确定,但我认为当用户使用“后退”按钮创建应用程序时,你的应用程序确实会关闭,除非你是因为其他原因捕获它,或者在后台运行共享相同会话首选项的其他服务

无论如何

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

试试看。这项工作做得很好。或者谷歌移动分析,它们都非常容易使用,并且可以为您处理这些问题

如果您想进行背景检查,只需在活动的onPause块中记录一个SharedReference,当应用程序的一部分出现新屏幕时刷新它,同时检查旧屏幕是否已过期,这将在onResume中发生


我不完全确定,但我认为当用户使用“后退”按钮存在应用程序时,你的应用程序确实会关闭,除非你是因为其他原因捕获它,或者在后台运行共享相同会话首选项的其他服务

无论如何

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

试试看。这项工作做得很好。或者谷歌移动分析,它们都非常容易使用,并且可以为您处理这些问题

如果您想进行背景检查,只需在活动的onPause块中记录一个SharedReference,当应用程序的一部分出现新屏幕时刷新它,同时检查旧屏幕是否已过期,这将在onResume中发生

在顶部呼叫。onStop在屏幕上的任何内容启动后都会被调用-如果它是同一apk包中的活动,那么您就不会进入后台。这确实需要GET_TASKS权限,如果某个活动在您未退出的情况下出现,它仍然会触发用户从通知栏中选择某个内容或其他内容

或者在开始时绑定到服务并在顶部取消绑定-当您的所有活动停止时,服务将被取消绑定,或者如果您不想依赖于取消绑定得到调用,则跟踪绑定与取消绑定-因为它可能不会

在顶部呼叫。onStop在屏幕上的任何内容启动后都会被调用-如果它是同一apk包中的活动,那么您就不会进入后台。这确实需要GET_TASKS权限,如果某个活动在您未退出的情况下出现,它仍然会触发用户从通知栏中选择某个内容或其他内容


或者在开始时绑定到服务并在顶部取消绑定-当您的所有活动停止时,服务将被取消绑定,或者如果您不想依赖于取消绑定,则跟踪绑定与取消绑定-因为它可能不会…

我可以使用Flurry/Google Analytics,但您会看到我试图重置的信息在应用程序中,与报告/跟踪无关。我看到你更新了问题。如果您能够准确地保留记录并以正确的方式检测到它,onPause应该可以工作。要使其简短,请使用SharedReference保留上次活动时间并刷新它。如果不能设置为“暂停”,则可以设置为“恢复”以检查该时间。这总是一个有效的例子,因为它必须被买到前台。如果您确实不信任这种方式,请尝试使用AlarmManager,并在每次发生交互时刷新警报,并使挂起事件使会话无效。有很多方法可以做到这一点,但使用首选项非常简单。请记住,如果您正在处理多个活动,这并不重要。如果它们是在同一进程上运行的同一个应用程序,通常会有一个清晰的堆栈。我可以使用Flurry/Google Analytics,但您会看到我试图重置的信息在应用程序中,与报告/跟踪无关。我看到您更新了问题。如果您能够准确地保留记录并检测到它,onPause应该可以工作
正确的方法。要使其简短,请使用SharedReference保留上次活动时间并刷新它。如果不能设置为“暂停”,则可以设置为“恢复”以检查该时间。这总是一个有效的例子,因为它必须被买到前台。如果您确实不信任这种方式,请尝试使用AlarmManager,并在每次发生交互时刷新警报,并使挂起事件使会话无效。有很多方法可以做到这一点,但使用首选项非常简单。请记住,如果您正在处理多个活动,这并不重要。如果它们是在同一进程上运行的同一应用程序,则通常会有一个清晰的堆栈。
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;
    }