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

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

所以我的问题是双重的:

1)是否有更好的方法来检测用户不活动,而不是使用activity.onUserInteraction()来重置CountDownTimer?

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

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

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

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

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

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

c)假设我想在倒计时到期时调暗屏幕或转到主要活动,应该在何处find超时处理程序? 在每项活动中? 在服务?

谢谢

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

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

为什么要在onCreate中重置计时器? 每次用户与应用程序交互时都应该这样做,例如在activity.onUserInteraction()方法中。

引用我之前的回答 :

您需要在这里仔细考虑您的要求,但从我所知道的,您想要跟踪用户交互,如果上次交互后的时间限制到期,请执行一些操作,将它们从您的应用程序中记录下来。

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

接下来,您需要开始跟踪用户互动。 从您的活动中,您可以覆盖onUserInteraction方法,只要用户与应用程序交互(如key事件),就会调用此方法。 每次使用此方法时,请更新您的单例,并通过时间戳让它知道发生了什么。

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

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

据推测,您的应用程序中已经有一些代码可以处理注销,例如当用户单击“注销”时,您应该能够在上面的示例中调用它。