我正在使用 android 中的库连接到终端仿真器,它连接到串行设备(开关)并显示发送/接收的数据。
当我收到数据时,以下方法会自动运行。当我收到数据时,我想在onDataReceived
方法中使用 invalidate 来更新模拟器屏幕,但是由于某种原因这不起作用,所以我创建了一个处理程序来每隔 1 秒执行一次,这样就可以了。
public void onDataReceived(int id, byte[] data)
{
dataReceived = new String(data);
((MyBAIsWrapper) bis).renew(data);
mSession.write(dataReceived);
mSession.notifyUpdate();
viewHandler.post(updateView);
}
现在我想测试接收到的某些字符的数据,所以我做了一个 for 循环onDataReceived
,同样这不起作用,它只会时不时地看到字符,缺少一些字符。所以我将循环添加到处理程序中:
Handler viewHandler = new Handler();
Runnable updateView = new Runnable()
{
@Override
public void run()
{
//update screen ever 1000ms
mEmulatorView.invalidate();
//should check data received every 1000ms
for(int i = 0; i < dataReceived.length(); i++)
{
if(dataReceived.charAt(i) == '>')
{
Log.d(TAG, "found >");
}
if(dataReceived.charAt(i) == '#')
{
Log.d(TAG, "found #");
}
}
viewHandler.postDelayed(updateView, 1000);
}
};
我的问题是,虽然我可以看到屏幕每秒更新一次,但在日志中我可以看到我发现字符的频率要高得多,它将它们打印到日志中 100 次,这是为什么呢?