【问题标题】:idle timeout for android app activityandroid 应用程序活动的空闲超时
【发布时间】:2012-10-28 20:14:56
【问题描述】:

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

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

提前致谢!

【问题讨论】:

  • 为什么使用 AsyncTask 而不是 Timer?
  • 为什么使用Timer? Android 的事件系统(参见 Handler)允许更轻量级的解决方案。

标签: android android-asynctask timeout


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    祝你好运。

    【讨论】:

      【解决方案3】:

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

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

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

      Documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-20
        相关资源
        最近更新 更多