繁体   English   中英

Android应用未响应UI线程的UI更改

[英]Android app not reacting to UI change from UI thread

我在Android用户界面中遇到了一个奇怪的问题。 当我想检查蓝牙连接功能时,我有一个简单的测试应用程序。 我实现了一种乒乓服务,我想在屏幕上说明乒乓活动。 为此,我将EditText字段放置在此处,使其不可编辑,并在交换乒乓消息后,在此处继续在X和+ char之间进行切换。 那就是我故事的背景。

我不得不在屏幕上说明活动(我真的很想知道该怎么做)。

这是执行切换的代码:

public void switchConnectionIndicator(){
    if(SteeringScreen.lastConnectionPing > SteeringScreen.lastScreenUpdate) {
        SteeringScreen.lastScreenUpdate = System.currentTimeMillis();
        EditText connection = (EditText) findViewById(R.id.connectionInd);
        System.out.println("Switch to "+(connection.getText().toString().equals("X") ? "+" : "X"));
        connection.setText(connection.getText().toString().equals("X") ? "+" : "X");
    }
}

方法位于与主UI屏幕相同的类中,并且由传感器事件触发以提供连续的屏幕刷新(我知道,它很脏,但是我只是想使其正常工作)。 乒乓活动有效,因为我在控制台中得到以下输出:

12-31 00:49:47.738  I/System.out: Switch to X
12-31 00:49:48.245  I/System.out: Switch to +
12-31 00:49:48.745  I/System.out: Switch to X
12-31 00:49:49.245  I/System.out: Switch to +
12-31 00:49:49.769  I/System.out: Switch to X
12-31 00:49:50.277  I/System.out: Switch to +
12-31 00:49:50.777  I/System.out: Switch to X
12-31 00:49:51.285  I/System.out: Switch to +
12-31 00:49:51.808  I/System.out: Switch to X

我和调试器一起检查了EditText组件中切换的确切时间,而这个混蛋在每个事件中都获得了正确的价值。 唯一缺少的是在屏幕上查看结果,该结果保持不变。 有人知道我在这里缺少什么吗?

首先,我不确定从何处调用您的方法,因此请确保setText在UI线程上发生(如果不是,则不一定会发生崩溃),您可以在方法内部使用以下代码来强制执行此操作

context.runOnUiThread(new Runnable() { 
    @Override
    public void run() {
        connection.setText(...);
    }
};

您还提到“传感器事件以提供连续的屏幕刷新”。 我不确定您要执行的操作是什么意思,但请确保您没有在膨胀任何东西(从而使对连接视图的引用过时)

我设法以一种可行的方式修改了我的代码。 我在这里唯一缺少的是它为什么起作用:D当我更改静态变量时:

  • SteeringScreen.lastConnectionPing
  • SteeringScreen.lastScreenUpdate

对于本地的私人公司,它开始起作用。 我不知道Java的某些秘密功能吗? 有人可以向我解释吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM