Android runOnUiThread() 线程波动

Android runOnUiThread() thread is fluctuating

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

调用该事件时,我需要用该值更新 UI。 因为它是一个工作线程,所以我的代码是这样的:

runOnUiThread(new Runnable() {
            @Override
            public void run() {
                binding.nfc.setVisibility(View.VISIBLE);
                binding.nfcProgressBar.setVisibility(View.VISIBLE);
            }
        });

其中绑定是将 UI 组件数据绑定到视图模型中。

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

NFC会在同一时间连续读取activity,打开app后第一次读取NFC是可以的,之后就波动了

每次它通过 运行OnUiThread Runnable 方法时,但 UI 有时只会更新。

我想知道是我的代码有问题还是 运行OnUiThread 只是这样。

它在波动。

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

如果您正确使用数据绑定和可观察对象,那么您不必关心您的线程。 Android 会为您处理。当您更新可观察值时,它会自动确保使用正确的 ui 线程来更新 ui.

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

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

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

的属性为您管理绑定和更新

现在,如果您放弃与绑定相关的部分,而只问您的 runOnUIThread 问题是什么,那就不一样了。必须查看完整的 classes,xml 布局和您试图影响的嵌套布局,然后我们才能开始深入挖掘。