Android のライブラリを使用して端末エミュレータに接続しています。これはシリアル デバイス (スイッチ) に接続し、送受信されたデータを表示します。
データを受信すると、以下のメソッドが自動的に実行されます。データを受信したら、メソッドで無効化を使用してエミュレーター画面を更新したかったのonDataReceived
ですが、何らかの理由でこれが機能しなかったため、代わりに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);
}
};
私の問題は、画面が 1 秒に 1 回更新されることを確認できますが、ログで文字を見つける頻度がはるかに高く、何百回もログに出力されていることです。これはなぜですか?