我有一个asyncTask,它正在后台线程中更新一些数据。当我需要更新我的UI时,我使用以下内容发布到主线程:
Handler mainHandler = new Handler(context.getMainLooper());
mainHandler.post(new Runnable() {
@Override
public void run() {
//do stuff on main thread
}
}
);
我想知道,主要循环器处理其消息的顺序是否有任何保证? ie:主线程会按照发布的顺序运行looper消息吗?
另外,如果我在AsyncTask的doInBackground
方法中使用上面的代码发布到主线程,是否会在AsyncTask的onPostExecute
方法运行之前运行?
答案 0 :(得分:2)
通过处理程序在looper上发布的内容将按照发布的顺序执行。
您在doInBackground中发布的内容将在您在onPostExecute中发布的内容之前发布。
请记住,onPostExecute已在主循环器上运行。
考虑使用onProgressUpdate而不是在处理程序上发布,当你从doInBackground方法执行publishProgress时,它将在主循环器上调用。