Java Android runOnUiThread()线程正在波动

Java Android runOnUiThread()线程正在波动,java,android,multithreading,android-runonuithread,Java,Android,Multithreading,Android Runonuithread,在Android应用程序中,我使用的是NFC阅读器。应用程序中有一个NFC阅读器的侦听器。当读取NFC标记时,它会触发应用程序中的侦听器。该侦听器不在主线程中,而是在工作线程中 调用该事件时,我需要使用该值更新UI。 由于它是工作线程,我的代码如下: runOnUiThread(new Runnable() { @Override public void run() { binding.nfc.setVisibili

在Android应用程序中,我使用的是NFC阅读器。应用程序中有一个NFC阅读器的侦听器。当读取NFC标记时,它会触发应用程序中的侦听器。该侦听器不在主线程中,而是在工作线程中

调用该事件时,我需要使用该值更新UI。 由于它是工作线程,我的代码如下:

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                binding.nfc.setVisibility(View.VISIBLE);
                binding.nfcProgressBar.setVisibility(View.VISIBLE);
            }
        });
其中绑定是将UI组件绑定到视图模型中的数据

问题在于UI组件的更新,即使run()中的代码行一直在执行。有时更新,有时不更新

NFC将在同一活动中持续阅读,我在打开应用程序后第一次阅读NFC时,它会工作,之后,它会波动

每次它都通过runOnUiThread Runnable方法,但UI只是偶尔更新

我想知道我的代码是否有问题,或者runOnUiThread只是这样


它是波动的。

您的问题与数据绑定无关,它只是使用数据绑定框架包装器来保存findViewById,而您仍然在手动执行其他所有操作。对你来说,这是一个美化的观景台模式

如果您正确地使用了数据绑定和观察,那么您就不必关心线程。Android会帮你解决这个问题。更新可观察值时,它将自动确保使用正确的ui线程更新ui

然而,你没有这样做。您正在手动使用binding.uielement.property=newValue 那也没什么不同 findViewById(someView).property=newValue 除此之外,事实上它已经为你完成了findview

这不是使用绑定的方式。您还可以回到findById的标准编码,然后设置它,因为您根本没有从绑定中获益

如果您希望通过绑定来管理它。您应该创建一个在onCreate中传递的可观察类,以允许它通过更新UI的属性为您管理绑定和更新

现在,如果你放弃了与绑定相关的部分,只是问一下你的RunNuithread问题是什么,那就不同了。必须查看所涉及的完整类、布局的xml和您试图影响的嵌套布局,然后我们可以开始深入研究。

runOnUiThread()方法将代码排队到已排队(由其他GUI组件)的方法/动画/动作等。。隐藏这两个小部件的代码可能在runOnUiThread()之后执行。仅仅用一段简单的代码很难帮助开发人员开发多线程应用程序。您发布的代码是正确的,因此我认为问题在于使用runOnUiThread()方法时,在这种特殊情况下代码的执行顺序。