2010-11-24 87 views
0

必須創建線程並運行5秒,然後停止。我怎樣才能做到這一點?如何在運行5秒後停止異步線程

我不能做時間/毫秒的東西。

THX。

+0

是否有計時器控制? – johnny 2010-11-24 22:01:38

+1

你想跑5秒,沒有做任何事情?世界衛生大會? – 2010-11-24 22:12:28

回答

2

使用AsyncTask.cancel(true)方法。

+0

這看起來很有保證。而且,我可以使用postDelayed在5秒後取消我的AsyncTask嗎?謝謝。 – bobetko 2010-11-24 22:31:07

0

對不起,我沒有說清楚在這裏。這裏是我用於同步線程的例子。 我的函數listen()運行5秒鐘然後退出。聽()是一個UDP監聽...

的問題,我有這個代碼,它停止我的主線程(我的手機沒有響應),直到上市()完成其5秒跑完。我想使用異步線程來避免手機凍結。當我說我不能隨時間做任何事情時,我試圖說我不能在listen()函數中放置某種計時器,然後測量經過的時間,然後在5秒後退出。不能這樣做。

Thread t = new Thread() { 
    public void run() { 
     try { 
      listen(); 
     } catch (IOException e) { 
      Log.d(TAG, "IOException (Discovery) " + e); 
      e.printStackTrace(); 
     } 
     synchronized (this) { 
      notifyAll(); 
     } 
    } 
}; 
synchronized (t) { 
    t.start(); 
    try { 
     t.join(5000); // 5 sec 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
3

在java中的線程是合作的 - 你不能強制停止線程。你可以做的是通知它停止(調用interrupt()或者提升一個標誌),然後代碼自動停止。

所以:

  1. 開始運行你的工作線程。在它內部重複(主工作循環內)檢查isInterrupted()並捕獲任何InterruptedExceptions - 在這種情況下退出線程。

  2. 啓動一個TimerTask爲5秒運行,然後調用interrupt()的工作線程。

更新:海報解釋說,他已經有一個工作代碼,他只需要而不阻塞UI異步運行它。

解決方案:設置AsyncTask並運行代碼裏面的doInBackground()方法。