从在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");
}
}
最佳答案
这些都不是完全相同的,尽管它们都会产生相同的净效应。
第一个和第二个的区别在于,如果你在执行代码的时候恰好是on主应用线程,第一个(runOnUiThread()
)将立即执行 Runnable
。第二个(post()
)始终将 Runnable
放在事件队列的末尾,即使您已经在主应用程序线程上。
第三个,假设你创建并执行了一个BackgroundTask
的实例,会浪费很多时间从线程池中抓取一个线程,去执行一个默认的no-op doInBackground ()
,在最终执行相当于 post()
的操作之前。这是迄今为止三者中效率最低的。如果您确实在后台线程中有工作要做,请使用 AsyncTask
,而不仅仅是使用 onPostExecute()
。
关于Android 基础知识 : running code in the UI thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850143/