【问题标题】:Doing UI task in doinbackground() in Android在 Android 的 doinbackground() 中执行 UI 任务
【发布时间】:2013-04-02 06:06:39
【问题描述】:

有没有办法在 AsyncTask 的 doinbackground() 中执行 UI 任务。我很清楚最好在 onPostExecute 方法中执行此操作。但就我而言,由于我需要使用可重复使用的警报,因此能够在我的 doinbackground 中访问 UI 将为我节省大量时间。也就是说,我需要在 46 个地方调整代码,但能够在 doinbackground 中做到这一点只需要在一个地方进行更改。

提前致谢

【问题讨论】:

  • 当您创建此问题并在此处发布时,您可以轻松编写一些代码并检查发生了什么。
  • 您可以在您的活动中定义和初始化一个处理程序,并从doInBackGround,只需向该处理程序发送一条空消息。即使要实现这一点,您也需要将 Activity 上下文传递给您的 AsyncTask

标签: android android-asynctask


【解决方案1】:

希望这能解决你的问题

    onPreExecute() {
       // some code #1
    }

    doInBackground() {
        runOnUiThread(new Runnable() {
                    public void run() {
                        // some code #3 (Write your code here to run in UI thread)

                    }
                });
    }

    onPostExecute() {
       // some code #3
    }

【讨论】:

    【解决方案2】:

    除了从onPostExecute() 更新 UI,还有 2 种更新 UI 的方法:

    1. doInBackground() 通过实现runOnUiThread()
    2. 来自onProgressUpdate()

    仅供参考,

    onProgressUpdate() - 每当您想从doInBackground() 更新任何内容时,您只需使用publishProgress(Progress...) 发布一个或多个进度单位,它将ping onProgressUpdate() 以在UI 线程上更新。

    【讨论】:

    • 感谢您的回复。你gt我的问题。将尝试 runOnUiThread()。 onProgressUpdate() 会再次变得乏味:)
    • 我不同意在 doInBackround() 中使用 runOnUiThread,它的错误和破坏了后台处理的主要目的。
    • @Sajmon 抱歉,我不同意你的观点,这取决于你如何在 runOnUiThread() 内部实现 doInBackground()
    【解决方案3】:

    您可以使用onProgressUpdate 而不是

    Docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多