Android 基础知识 : running code in the UI thread

标签 android android-asynctask android-view android-ui

从在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/

相关文章:

android - for循环在异步任务的Doinbackground中不递增

android - 在使用 ViewFlipper 时,是否可以将后退按钮映射到前一个 View 而不是退出整个应用程序?

java - Android 应用程序中的推送通知

android - 我可以在 android 中完全重新启动服务吗?

android - 在 Android 版 Dropbox 中从哪里可以找到 App Secret?

Android - 为乒乓球游戏创建定时器循环

android - 自定义 View ,如 android 的锁定/解锁屏幕

java - Android,添加高度百分比的 View

android - 如何避免从 image_view 中的数组中随机化图像?

android - android 应用程序中的预构建 native 库