我正在为平板电脑编写Android应用(ICS)。只需按一下按钮,用户就可以从活动A移动到活动B到活动C.我希望在10秒后从活动C返回到活动A.有没有办法在没有锁定活动C的情况下数到10?
我已成功使用asyncTask但是如果我在onPostExecute()中使用startActivity(A),我觉得我违反了asyncTask不应该弄乱UI的指导原则。我尝试过get()但是在等待10秒钟的时候确实锁定了活动C.
提前致谢!
答案 0 :(得分:1)
假设您的活动中有任何View
个实例,您可以使用View.postDelayed()以给定的延迟发布runnable。在此runnable中,您可以致电Activity.finish()。您还应该使用View.removeCallbacks()删除onDestroy()
中的回调,以避免在用户已经从您的活动中导航后调用回调。
使用AsyncTask
只计算一些时间只是一种矫枉过正(除非你想使用AsyncTask
来实际做一些有用的后台工作)。 Looper
和Handler
类提供了在给定延迟后在UI线程上执行任何代码所需的一切。上面提到的View
方法只是暴露Handler
功能的便捷方法。
答案 1 :(得分:0)
使用AsyncTask可以正常工作。来自Android文档:
onPostExecute(Result),在后台计算完成后在UI线程上调用。
因为它在UI线程上调用你应该没问题。
答案 2 :(得分:0)
您可以使用警报管理器。将其设置为从活动a开始10秒发送广播并实现活动a b和c接收广播的基本活动,在接收到广播后刚刚结束当前活动并用新标志启动活动a。如果当前实例是活动a,则忽略如果不是启动活动a。这样的事情。
对于空闲部分,您可以在进入活动等时更新每个操作的警报管理器。
这种实现的优点在于,您不必经历必须担心上下文泄漏,使计时器持续跨越活动等麻烦。并且可以利用已经存在的东西。您也可以考虑使用服务。
如果不是,您可以使用共享首选项存储时间超时并检查或更新操作。更简单的实现。
祝你好运。