Android runOnUiThread不异步

丹尼尔·范登伯格

我有这段代码:

public void updateOptionLists() {
    Log.d("UI", "Called update");
    if (updating){
        return;
    }
    updating = true;
    runOnUiThread(
            new Runnable() {
                @Override
                public void run() {
                    updating = false;
                    updateOptionList();
                    scrollToLastTapped();
                    Log.d("UI","Updating");
                }
            });
    Log.d("UI", "Posted update");
}

我对logcat的期望是这样的:

  • 称为更新
  • 发布更新
  • 更新中

据我所知,runOnUi应该是异步的,对不对?考虑到调用的函数会更改视图,这需要一段时间,因此它应该异步运行。对?

所以我看我的logcat:

  • 称为更新
  • 更新中
  • 发布更新

为什么会这样?以及如何确保它异步运行?

斯特肯特

runOnUiThread将在主线程上执行您的代码(在此示例中)也似乎是从其调用的地方。这解释了您看到的日志语句的顺序-所有代码都在单个线程上执行,因此每个文档都是同步(我的重点是):

在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列。

runOnUiThread通常用于其他线程(即后台线程)在主线程上执行代码使用此单独的后台线程将使任务异步。如果要使用后台线程计算的结果修改UI,则需要在该任务结束时回调UI线程。

Android提供了几种机制来在后台线程上进行工作,然后将其发布回主线程(并非全部都runOnUiThread明确地用于后一个操作)。好东西要阅读了关于包括ThreadHandlerAsyncTaskService,等。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何使用Kotlin将runOnUiThread追加到Android

来自分类Dev

“ runOnUiThread”上的Android线程/ AsyncTask,ExceptionInInitializerError和RuntimeException

来自分类Dev

如何在Xamarin Android中使用RunOnUIThread()

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

异步Servlet不异步运行

来自分类Dev

Android runOnUiThread执行顺序

来自分类Dev

Android runOnUiThread()不更新TextView

来自分类Dev

Android异步任务的同步策略

来自分类Dev

Android Listview异步图像加载

来自分类Dev

按返回按钮时,Android runOnUiThread崩溃

来自分类Dev

在Android中取消异步任务

来自分类Dev

Android中的RxJava异步任务

来自分类Dev

Android异步类返回null

来自分类Dev

Android多个异步调用

来自分类Dev

如何使用Kotlin在runOnUiThread中播放追加到Android

来自分类Dev

异步循环不尊重异步

来自分类Dev

Android runOnUiThread线程安全

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

如何在Xamarin Android中使用RunOnUIThread()

来自分类Dev

Android异步映射参数

来自分类Dev

Android runOnUiThread()不更新TextView

来自分类Dev

Android:方法的异步线程

来自分类Dev

RunOnUiThread加载失败,需要对象引用(android)

来自分类Dev

Android:runOnUiThread混合输出

来自分类Dev

Xamarin Android RunOnUiThread()在新的OnCreate()调用后无法正常工作

来自分类Dev

Android Asynctask 和 runOnUiThread

来自分类Dev

Android 异步问题?

来自分类Dev

runOnUiThread 在 Android 中不起作用

来自分类Dev

Android runOnUiThread() 线程波动