2013-05-17 116 views
-1

處理器HND =新的處理程序(){爲什麼「msg.sendToTarget」會停止循環?

@Override 
    public void handleMessage(Message msg) { 

     int id = sequence.get(msg.arg1); 

     if(msg.arg1 % 2 == 0) { 
      sq.get(id-1).setBackgroundResource(R.drawable.square_show); 
     } else { 
      sq.get(id-1).setBackgroundResource(R.drawable.square); 
     } 
    } 
}; 

@Override 
public void onResume() { 
    super.onResume(); 

    Thread background = new Thread(new Runnable() { 
     public void run() { 
      try { 
       for(int i = 0; i <= sequence.size()-1; i++) { 
        Thread.sleep(200); 
        Message msg = hnd.obtainMessage(); 
        msg.arg1 = i; 
        msg.setTarget(hnd); // EDITED 
        msg.sendToTarget(); 
        record_tv.setText(""+i); 
       } 
      } catch(Throwable t) { 

      } 
     } 
    }); 

    background.start(); 
} 

代碼到達msg.sendToTarget(),它做的事情,然後就再也沒有回來

+0

也許你不應該捕捉異常,然後忽略它們。如果您至少記錄了異常情況,您可以回答自己的問題。 –

+0

可能是record_tv.setTexT()導致塊catch被調用,並且運行結束。 Probaby你想要和for/try/catch? – Blackbelt

回答

2

sendToTarget();拋出一個空指針異常它,你有沒有一套一個接收器setTarget(Handler)

而且,在你的代碼中,我看到

record_tv.setText(""+i); 

這條線,你的線程內將拋出一個

android.view.ViewRoot$CalledFromWrongThreadException 
+0

謝謝,你解決了我的問題,但現在我不知道爲什麼,它只是到達sq.get(id-1).setBackgroundResource(R.drawable.square_show);第一次和第三次(第二次它什麼都不做),但它永遠不會到達sq.get(id-1).setBackgroundResource(R.drawable.square); – DomeWTF

+0

在邏輯中有一個錯誤,在這裏我似乎無法找到 – DomeWTF

+0

可能record_tv.setTexT()導致塊catch被調用,並且運行結束。 Probaby你想反轉for和try/catch? – Blackbelt