我正在使用AsyncTask将数据上传到UI。我写了代码从服务器下载一个单独的方法,我从doinBackground调用该方法。它会给出错误,因为UI方法无法从doInBackground访问。但是,我想访问。任何替代进程都可以从doinBackground访问UI方法。?
答案 0 :(得分:47)
可以从doinBackground访问UI方法。
在publishProgress()
中致电doInBackground()
。将您的UI更新逻辑放在onProgressUpdate()
的{{1}}中。调用AsyncTask
后,将在主应用程序线程(a.k.a.,UI线程)上调用onProgressUpdate()
。 Here is a sample project证明了这一点。
答案 1 :(得分:7)
调用 runOnUiThread(可运行的操作)
答案 2 :(得分:2)
仅对以下任务使用doInBackground()
:
然后你可以实现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