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