【发布时间】:2012-03-15 11:59:55
【问题描述】:
我正在使用 AsyncTask 将数据上传到 UI。我编写了代码以以单独的方法从服务器下载数据,并且我从 doinBackground 调用该方法。它会给出错误,因为 UI 方法无法从 doInBackground 访问。但是,我想访问 .是否有任何替代过程可以从 doinBackground 访问 UI 方法?
【问题讨论】:
我正在使用 AsyncTask 将数据上传到 UI。我编写了代码以以单独的方法从服务器下载数据,并且我从 doinBackground 调用该方法。它会给出错误,因为 UI 方法无法从 doInBackground 访问。但是,我想访问 .是否有任何替代过程可以从 doinBackground 访问 UI 方法?
【问题讨论】:
是否有任何替代过程可以从 doinBackground 访问 UI 方法?
在doInBackground() 中致电publishProgress()。将您的 UI 更新逻辑放在您的 AsyncTask 中的 onProgressUpdate() 中。在您调用 publishProgress() 之后,将在主应用程序线程(也称为 UI 线程)上调用 onProgressUpdate()。 Here is a sample project 演示了这一点。
【讨论】:
调用 runOnUiThread(Runnable action)
【讨论】:
仅将doInBackground() 用于以下任务:
然后你可以实现 AsyncTask.onPostExecute() 来运行代码来处理来自 AsyncTask 的主 UI 线程上的结果
来自AsyncTask.onPostExecute()的JavaDoc:
“doInBackground 之后在 UI 线程上运行。...”
【讨论】:
正如其他人所指出的,您可以使用 runOnUiThread。但是,您想在 doInBackground 中执行此操作似乎有点奇怪。如果您想向用户指示进度,您需要在 AsyncTask.onProgressUpdate 中处理它并在您的 doInBackground 中调用 publishProgress。
您可以在此处阅读有关 AsyncTask 的更多信息:http://developer.android.com/reference/android/os/AsyncTask.html
-丹
【讨论】: