2011-07-01 22 views
0

我有一個活動(myActivity)和一個線程(MyThread),兩者都帶有一個允許我在UI線程和myCustomThread之間發送消息的處理程序。 現在我想定期(10秒)從MyActivity中調用MyThread線程的ALIVE消息。我怎麼能做到這一點?線程中的定期消息

MyActivity:

public void onResume() 
{ 
    super.onResume(); 
    this.thread     = new MyThread(activityHandler); 
    this.threadHandler = this.thread.gethandler(); 

    threadMessage   = this.threadHandler.obtainMessage(); 
    threadMessage.what = AUTH; 
    this.threadHandler.sendMessage(threadMessage); 
} 

MyThread的:

@覆蓋

public void run() 
{ 

     Looper.prepare(); 

     this.threadHandler = initHandler(); 

     this.message  = this.activityHandler.obtainMessage(); 
     this.message.what = CONNECTED; 
     activityHandler.sendMessage(this.message); 

     Looper.loop(); 

} 

private Handler initHandler() 
{ 
    return new Handler() { 

     public void handleMessage(Message msg) 
     { 
      switch(msg.what) 
      { 
       case AUTH : 
       { 
        auth(); 
        break; 
       } 

       case ALIVE : 
       { 
        sendAlive(); 
        break; 
       } 
      } 
     } 
    }; 
} 

感謝您的幫助

回答

0

我終於找到一個解決方案機智h sendEmptyMessageDelayed(ALIVE,10000)

長話短說,我從我的UI線程調用一次ALIVE,並在sendAlive()方法結束時,我發送一個delayedMessage給線程本身,在X毫秒後重新調用ALIVE。

使用此解決方案不需要新的線程或計時器。

0

正確的解決方案實際上取決於你正在努力拼湊什麼...

This是穿行用於對計時器的作用,以及如何使用延遲後(的首選方式按計劃執行,因爲它不使用定時器的線程)。這是一個很好的寫作,他們包括了爲什麼。

希望這會有所幫助。

+0

延遲發佈是一個很好的解決方案。我使用它沒有計時器(見我以前的答案),它的效果很好。謝謝 – grunk