1
我連接到一個終端模擬器,使用Android中的庫,它連接到串行設備(交換機)並顯示我發送/接收的數據。Handler運行的頻率比它應該多嗎? (postDelayed)
當我收到數據時,以下方法自動運行。當我收到數據時,我想使用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
一個循環,這同樣沒有工作,只將現在又看人品,缺少其中的一些。因此,我增加了循環到處理程序來代替:
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倍的日誌,這是爲什麼?
我會試試這個謝謝,但我不確定在哪裏/何時將此條件設置爲true和false。所以我還沒有完全遵循。就像接收到數據,我將其設置爲true,然後在運行後將其設置爲false? – Paul
我的問題是,onDataReceived不能可靠地通過它的代碼運行,缺少字符等,只有通過for循環有時。所以我必須讓這個處理程序,也許改變布爾的狀態也是如此,我會看到的。 – Paul
我改變了你現在所說的那樣,而不是每隔1秒跑一遍又一遍地找到角色。它發現它曾經我認爲比預期更好。 – Paul