Android检测和处理用户不活动的最佳方式

And*_*der 16 android

不活动是一个非常重要的事件.对于许多应用程序,如果用户在一定时间内没有与其进行交互,则需要重置应用程序并返回主要活动注销,或节省电量.所以我真的希望得到一些关于检测这种情况的最佳方法的反馈.事实上,我认为每个人都将从中获益.

所以我的问题是双重的:

1)有没有比使用activity.onUserInteraction()组合重置CountDownTimer更好的方法来检测用户不活动?

注意:据报道,这种方法的一个缺点是这种方法可能无法捕获软键盘交互.

注意:另一个报告的缺点是CountDownTimer是主线程关闭,可能无法正确更新.我不确定这是一个多大的问题?

注意:CountDownTimer似乎也有取消问题: 如何停止/取消android CountDownTimer

2)让我们说onUserInteraction()/ CountDownTimer是这个问题的最佳/唯一解决方案仍有一些问题:

a)每个活动应该启动自己的倒数计时器吗?

b)是否应在每项活动的onCreate方法中重新启动一个倒数计时器?

c)让我说我想在倒计时到期时调暗屏幕或转到主要活动应该在哪里找到超时处理程序?在每项活动中?在服务?

谢谢

Jim*_*mmy 4

刚刚偶然发现了这个问题,因为刚刚回答了类似的问题。

就我个人而言,我会选择您建议的选项 2,并将计时器放入单例中,以便它可以在所有活动中使用。除非您有特定要求在应用程序的不同功能下做出不同的反应,否则不需要单独的倒计时器。

为什么要在 onCreate 中重置计时器?您应该在每次用户与应用程序交互时执行此操作,例如在 Activity.onUserInteraction() 方法中。

引用我之前的回答

您需要花一点时间思考一下您的要求是什么,但据我所知,您希望跟踪用户交互,并且如果自上次交互以来时间限制到期,请在您的案例将它们从您的应用程序中注销。

首先,您需要一些可以跟踪上次交互发生时间的地方,因为您希望这是应用程序范围内的,所以您可以使用单例来保存它,或者覆盖应用程序类,无论哪种方式都应该这样做。

接下来,您需要开始跟踪用户交互。在您的活动中,您可以重写 onUserInteraction 方法,只要用户与应用程序交互(例如按键事件),就会调用该方法。每次您点击此方法时,请更新您的单例并让它知道发生了一些事情,并带有时间戳。

最后,您需要某种循环检查来不断检查最近是否发生了任何事情。这样做有多种方法,您可以有一个连续循环,将当前时间戳与最后记录的事件进行比较,一些草稿代码:

while(true)
{
   if (timeLastEventRecorded < (now - 15))
   {
      //nothing has happened in 15 minutes, so take corrective action
   }
}
Run Code Online (Sandbox Code Playgroud)

想必您的应用程序中已经有一些负责注销的代码,例如当用户单击“注销”时,您应该能够在上面的示例中调用该代码。