Android:从AsyncTask doInBackground方法调用UI线程上的方法

时间:2012-03-15 11:59:55

标签: android android-asynctask

我正在使用AsyncTask将数据上传到UI。我写了代码从服务器下载一个单独的方法,我从doinBackground调用该方法。它会给出错误,因为UI方法无法从doInBackground访问。但是,我想访问。任何替代进程都可以从doinBackground访问UI方法。?

4 个答案:

答案 0 :(得分:47)

  

可以从doinBackground访问UI方法。

publishProgress()中致电doInBackground()。将您的UI更新逻辑放在onProgressUpdate()的{​​{1}}中。调用AsyncTask后,将在主应用程序线程(a.k.a.,UI线程)上调用onProgressUpdate()Here is a sample project证明了这一点。

答案 1 :(得分:7)

调用 runOnUiThread(可运行的操作)

more here

答案 2 :(得分:2)

仅对以下任务使用doInBackground()

  1. 花一些时间
  2. 与UI无关
  3. 然后你可以实现AsyncTask.onPostExecute()来运行代码来处理来自AsyncTask的主UI线程上的那些结果

    来自JavaDoc for AsyncTask.onPostExecute()

      

    “在doInBackground之后在UI线程上运行....”

答案 3 :(得分:1)

正如其他人所指出的那样,你可以使用runOnUiThread。但是,你想在doInBackground中做这件事似乎有点奇怪。如果您想向用户指示进度,您可能希望在AsyncTask.onProgressUpdate中处理该进度并在doInBackground中调用publishProgress。

您可以在此处详细了解AsyncTask:http://developer.android.com/reference/android/os/AsyncTask.html

-Dan