从在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的实例,在最终执行等同于post()的操作之前,将浪费大量时间从线程池中抓取线程,以执行默认的无操作doInBackground().到目前为止,这是这三个国家中效率最低的一个.如果您在后台线程中确实有工作要做,请使用AsyncTask,而不仅仅是使用onPostExecute().

Android相关问答推荐

编写Landscape BoxWithRequests具有错误的高度.(aspectRatio matchHeight约束第一次未按预期工作)

Android可组合继承?

Android Jetpack Compose Material3主题配色方案

如何在android库中关联应用程序链接?

为什么 Android Studio 中的 theme.xml 目录没有任何原色

Android Jetpack Compose 电视焦点恢复

我的自定义小吃店不适合我的全宽屏幕尺寸

通知使用默认语言,屏幕显示多种语言,同时通过 AppCompatDelegate 设置应用程序语言

从 HiltViewModel @Injection 访问 Application()

在 jetpack compose 中交替使用 View.INVISIBLE

来自位图的 WearOS 图标不显示 colored颜色

当包含可绘制对象的整数变量传递给 painterResource 函数时,为什么图像不在 Android Studio 中呈现?

在 Jetpack Compose 中包装内容

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

0dp 大小的可组合文件是否可以组合?

当我更改 ViewModel var 时,Kotlin + Compose 中的 Composable 不会更新

Google Play 控制台您的应用是否使用广告 ID?

EAS 构建失败,错误代码为 1,但 Expo Build 成功,我需要 EAS 构建来删除未使用的包,如 com.segment.analytics.android:analytics

如何根据加载图像的 colored颜色 绘制边框?

使用 Jetpack Compose 的深层链接导航到可组合项