2016-11-21 74 views
-1

我有一個線程等待Looper.Prepare()和Looper.loop()的消息的場景。當在UI中點擊一個按鈕時,向Handler發送一條消息,通知點擊按鈕。如果沒有按鈕點擊2分鐘,我想打破活套,如何實現它?我嘗試使用Timer和TimerTask但沒有任何反應android處理程序等待消息一段時間

的代碼是在非UI線程

Looper.prepare(); 
     uiHandler = new Handler() { 
     public void handleMessage(Message msg) { 
     // Act on the message 
     if (msg.obj.contains("DONE")) { 
     Toast.makeText(MainActivity.this, "Done task",     
       Toast.LENGTH_LONG).show(); 
     }  
     } 
    } 
    Looper.loop(); 

遵循從UI線程:

btnDone.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Message msg = Message.obtain(); 
      msg.obj = "DONE"; 
      uiHandler.sendMessage(msg); 
     } 
    }); 
+1

'== 「DONE」'<=倒不如先學... – Selvin

+0

呼叫'Looper.quit()'當適當的Java的基礎知識。 – earthw0rmjim

+0

如何通知looper,這2個薄荷糖是完成的問題..我面臨着... –

回答

0

您可以通過使用處理器postDelayed實現這一目標方法

Runnable runnable = new Runnable() { 
    @Override 
    public void run() { 
     Toast.makeText(MainActivity.this, "Done task",     
      Toast.LENGTH_LONG).show(); 
    } 
} 
uihandler.postDelayed(runnable , 2*60*1000); 

並在onClickListener中使用removeCallback方法

uiHandler.removeCallbacks(runnable); 
+0

Runnable應該在UI線程還是非uithread? –

+0

並不重要,它取決於你在哪裏定義處理程序,它似乎你在MainActivity上定義它,它將在MainActivity的線程上處理 – Farid