从在UI线程中运行代码的角度来看,两者之间是否有任何区别:
MainActivity.this.runOnUiThread(new Runnable() {
public void run() {
Log.d("UI thread", "I am the UI thread");
}
});
要么
MainActivity.this.myView.post(new Runnable() {
public void run() {
Log.d("UI thread", "I am the UI thread");
}
});
和
private class BackgroundTask extends AsyncTask<String, Void, Bitmap> {
protected void onPostExecute(Bitmap result) {
Log.d("UI thread", "I am the UI thread");
}
}
最佳答案
尽管它们都具有相同的净效果,但没有一个是完全相同的。
第一个和第二个之间的区别是,如果您在执行代码时碰巧在主应用程序线程上,则第一个(runOnUiThread()
)将立即执行Runnable
。第二个(post()
)始终将Runnable
放在事件队列的末尾,即使您已经在主应用程序线程上也是如此。
第三个假设您创建并执行了BackgroundTask
实例,那么在最终执行相当于doInBackground()
的操作之前,将浪费大量时间从线程池中抓取线程来执行默认的no-op post()
。到目前为止,这是效率最低的三个。如果您实际上有工作要在后台线程中进行,而不仅仅是为了使用AsyncTask
,请使用onPostExecute()
。