我是Android Studio的新手,甚至还在编写Java。我是一个嵌入式程序员,使用非常低级别的C来编程设备,所以这里......
我在我编写的状态机中使用了以下代码,我正在努力确保我有一个清晰的逻辑序列来处理Android设备上对BLE服务的连接/断开请求:
this.stateTxt.setText(R.string.state_ConnectionScanning);
this.connectBtn.setText(R.string.button_disconnect);
this.connectBtn.setEnabled(false);
myBleScanner.flushPendingScanResults(myBleCallback);
myBleScanner.startScan(myBleCallback);
myTimerHandler.postDelayed(new Runnable() {
@Override
public void run() {
...
}
},this.SCAN_PERIOD);
if(scanSuccessful) {
theNewState = ConnectionStateList.ConnectingState;
}
else {
theNewState = ConnectionStateList.InitializeState;
}
我的问题是,在我调用myTimerHandler()之前执行的语句(谁的回调处理BLE设备的扫描)总是在计时器超时后执行。他们通过将文本写入Button对象并更新TextView对象以进行可视化和调试来更新UI。
在调用计时器和后续调用Android服务之前,是否必须强制更新UI?有没有办法运行较少的重要后台任务,以确保首先更新UI?或者(我意识到这是更合理的问题)我的代码是错误的并且我做了一些完全错误的事情?
我想指出,直到我通过状态机进入这一点,所有Button和Textview对象的更改都能正常工作。
干杯!!