android app活动的空闲超时

时间:2012-11-08 15:40:39

标签: android android-asynctask timeout

我正在为平板电脑编写Android应用(ICS)。只需按一下按钮,用户就可以从活动A移动到活动B到活动C.我希望在10秒后从活动C返回到活动A.有没有办法在没有锁定活动C的情况下数到10?

我已成功使用asyncTask但是如果我在onPostExecute()中使用startActivity(A),我觉得我违反了asyncTask不应该弄乱UI的指导原则。我尝试过get()但是在等待10秒钟的时候确实锁定了活动C.

提前致谢!

3 个答案:

答案 0 :(得分:1)

假设您的活动中有任何View个实例,您可以使用View.postDelayed()以给定的延迟发布runnable。在此runnable中,您可以致电Activity.finish()。您还应该使用View.removeCallbacks()删除onDestroy()中的回调,以避免在用户已经从您的活动中导航后调用回调。

使用AsyncTask只计算一些时间只是一种矫枉过正(除非你想使用AsyncTask来实际做一些有用的后台工作)。 LooperHandler类提供了在给定延迟后在UI线程上执行任何代码所需的一切。上面提到的View方法只是暴露Handler功能的便捷方法。

答案 1 :(得分:0)

使用AsyncTask可以正常工作。来自Android文档:

  

onPostExecute(Result),在后台计算完成后在UI线程上调用。

因为它在UI线程上调用你应该没问题。

Documentation

答案 2 :(得分:0)

您可以使用警报管理器。将其设置为从活动a开始10秒发送广播并实现活动a b和c接收广播的基本活动,在接收到广播后刚刚结束当前​​活动并用新标志启动活动a。如果当前实例是活动a,则忽略如果不是启动活动a。这样的事情。

对于空闲部分,您可以在进入活动等时更新每个操作的警报管理器。

这种实现的优点在于,您不必经历必须担心上下文泄漏,使计时器持续跨越活动等麻烦。并且可以利用已经存在的东西。您也可以考虑使用服务。

如果不是,您可以使用共享首选项存储时间超时并检查或更新操作。更简单的实现。

祝你好运。