Android检测应用程序是否进入后台

Tej*_*udi 4 android logout

我正在尝试为Android上的应用程序实现一些自动注销代码.

我需要检测属于应用程序的所有活动是否已进入后台,而不是使用onPause()onResume()为每个单独的活动.iOS有一个applicationDidEnterBackground:我可以使用的有用方法,但我无法在Android的Application类中找到类似的功能.

一种方法似乎是有一个AtomicInteger计数器,一旦活动变得可见就增加它,并在它完成时减少它或者调用onStop().因此,如果计数器变为零,我可以启动在后台运行的服务并处理注销.这是通常的做法吗?

hac*_*bod 18

这没有全局回调,但对于每个活动,它都是onStop().你不需要乱用原子int.只需要一个包含已启动活动数的全局int,在每个活动中增加onStart()并在onStop()中减少它.

  • 这非常有效.如果您有所有活动的基类,则可以轻松检测应用程序何时移动到前台(计数从0增加到1)以及何时将其移动到后台(计数达到0). (4认同)

Com*_*are 14

当"应用程序"在后台运行时,您真的不想注销用户,当用户切换到另一个选项卡或暂时最小化其浏览器窗口时,您不仅要注销Web应用程序的用户.如果您要在Web应用程序中执行上述任一操作,您的用户会认为您的Web应用程序是史诗般的失败.同样,如果用户拨打的电话号码错误,或者闹钟响起,如果他们必须立即返回并在5秒前使用您的应用时登录,他们会对您感到非常恼火. .在这里,"烦躁",我指的是市场上的一星评级和讨厌的评论.

Web应用程序自动注销基于不活动,使用服务器会话cookie.

同样,当我构建一个安全的Android应用程序时,我将实现一个基于非活动的机制,可能是这样的:

步骤1:Session使用静态单例实例创建一个类.该Session对象包含最后访问的时间戳.

步骤2:在每个活动中onResume(),查看Session单身是否存在.如果没有,这是一个全新的过程,所以如果这不是身份验证活动,请立即执行startActivity()以启动身份验证活动.

步骤#3:回到每个活动中onResume(),如果Session对象存在,则调用类似的东西extend().这将返回a boolean,true表示会话仍然良好(并且时间戳已更新到现在),false否则.如果它返回false,则执行与Session对象相同的操作null.

步骤#4:成功时,您的身份验证活动会Session使用当前时间戳设置单例对象.

步骤#5:您的Session班级extend()方法是您确定会话是否太旧的地方.

无论用户如何进入您的应用程序,如果会话太旧(或者它是一个全新的流程),他们将被迫进行身份验证.然而,如果用户短暂中断 - 您和/或用户可以"简要"定义 - 他们不必重新进行身份验证.

  • 有些应用程序在进入后台时会注销,例如银行应用程序.只是我的观点... (2认同)