0

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

我已经成功完成了 asyncTask,但是如果我在 onPostExecute() 中 startActivity(A),感觉就像我违反了 asyncTask 不应与 UI 混淆的准则。我试过 get() 但这确实在等待 10 秒过去时锁定了 Activity C。

提前致谢!

4

3 回答 3

1

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

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

于 2012-11-08T15:51:33.687 回答
0

正如您所描述的,使用 AsyncTask 可以正常工作。来自 Android 文档:

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

由于它是在 UI 线程上调用的,所以应该没问题。

文档

于 2012-11-08T15:45:58.477 回答
0

您可以为此使用警报管理器。将其设置为从活动 a 开始 10 秒发送一个广播,并为活动 ab 和 c 实现一个基本活动以接收广播,在接收到广播后,只需结束当前活动并使用新标志启动活动 a。如果当前实例是活动 a,则如果不是启动活动 a,则忽略。类似的东西。

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

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

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

祝你好运。

于 2012-11-08T15:50:24.123 回答