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