gpt4 book ai didi

java - 处理程序运行得比它应该的更频繁? (延迟后)

转载 作者:行者123 更新时间:2023-11-30 03:50:14 24 4
gpt4 key购买 nike

我正在使用 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);
}

现在我想测试接收到的特定字符的数据,所以我在 onDataReceived 中做了一个 for 循环,同样这不起作用,它只会偶尔看到字符,丢失一些他们。所以我将循环添加到处理程序中:

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 次,这是为什么?

最佳答案

我真的不知道,但原因可能是因为 runnable 没有停止。只需设定一个条件,即只有当这个条件为真时,runnbale 才应该开始。所以如果为false,runnable会自动停止,例如:

        @Override
public void run()
{
//update screen ever 1000ms
mEmulatorView.invalidate();

if(yourCondition==true){ //put here a condition that the runnable only starts if this is true
//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);
}
}

};

关于java - 处理程序运行得比它应该的更频繁? (延迟后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14278312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com