1

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 回更新されることを確認できますが、ログで文字を見つける頻度がはるかに高く、何百回もログに出力されていることです。これはなぜですか?

4

1 に答える 1

1

よくわかりませんが、ランナブルが止まらないので理由が考えられます。この条件が真の場合にのみrunnbaleが開始するように条件を設定するだけです。したがって、falseの場合、実行可能ファイルは自動的に停止します。次に例を示します。

        @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);
    }
   }

  };
于 2013-01-11T13:05:09.903 に答える