【问题标题】:How to execute background job that update UI view Android [closed]如何执行更新UI视图Android的后台作业[关闭]
【发布时间】:2011-07-24 19:30:57
【问题描述】:

在我的 Android 应用程序中,我有一个带有视图的活动。

例如,在活动开始或创建主布局时,我想启动一个后台作业,每 5 秒从主布局更新 UI 视图。

因此,我目前的策略是在创建主布局期间使用派生自 View 的类的 runOnUiThread 方法创建 Runnable。

线程正确启动,但在线程中我想等待 5 秒以等待再次更新 UI 视图。我的问题是当我使用 Thread.sleep 时,UI 被阻塞了。

我猜 Thread.sleep() 会阻塞整个 UI,但我不知道我必须如何解决这个问题。

所以我的问题如下:实现我想要什么的最佳解决方案是什么(也许不使用睡眠)?

【问题讨论】:

标签: android multithreading user-interface background


【解决方案1】:

还可以考虑将AsyncTask 与计时器一起使用。这样你就不用担心处理程序了

【讨论】:

  • 我不确定如何使用 AsyncTask 的重复任务。你会怎么做?
  • 您可以在 doInBackground 中有一个 while 循环,它使用 SystemClock.sleep(millis) 在循环结束时等待 5 分钟。当你想停止更新任务时,你总是可以取消(布尔)AsynTask
  • 当你想停止更新我的意思的活动时
  • 嗯,doInBackground 不在 UI 线程上运行。您将如何让您的代码在 UI 线程上运行?
  • 看看我贴的链接(点击AsyncTask)。您在循环内调用方法 publishprogress(param) 并且 onProgressUpdate(param) 将被调用。 onProgressUpdate(param) 在 UI 线程上运行
【解决方案2】:

您可以使用Timer 来安排重复的TimerTask。每次您想更新 UI 时,都可以发布到您之前在 UI 线程中创建的 Handler

只要记住在onPausecancel 你的Timer 并在onResume 中创建一个新的Timer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2016-06-05
    相关资源
    最近更新 更多