2013-01-11 31 views
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倍的日誌,這是爲什麼?

回答

1

我真的不知道,但原因可能是,因爲runnable沒有停止。只要有條件,runnbale應該只在這個條件爲真時纔開始。因此,如果它是假的,可運行的程序會自動停止,例如:

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

    }; 
+0

我會試試這個謝謝,但我不確定在哪裏/何時將此條件設置爲true和false。所以我還沒有完全遵循。就像接收到數據,我將其設置爲true,然後在運行後將其設置爲false? – Paul

+0

我的問題是,onDataReceived不能可靠地通過它的代碼運行,缺少字符等,只有通過for循環有時。所以我必須讓這個處理程序,也許改變布爾的狀態也是如此,我會看到的。 – Paul

+0

我改變了你現在所說的那樣,而不是每隔1秒跑一遍又一遍地找到角色。它發現它曾經我認爲比預期更好。 – Paul