从在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()

07-24 09:49
查看更多