我有一個服務啓動一個線程和一個Runnable像這樣。停止/銷燬線程
t = new Thread(new Runnable() {
public void run() {
doSomething();
}
});
t.start();
的原因線程是執行一個異步任務doSomething的()。現在不要擔心其他類AsyncTask。我已經嘗試過了,它不適合我的情況。編輯:我不能使用AsyncTask,因爲它只用於UI線程。這一段代碼具有到服務內操作,所以不,不的AsyncTask :(
doSomething的()包含一些外部庫,所以我遇到的問題是,它可以潛在地在其中一個命令被懸掛,不返回任何值(因此沒有錯誤檢查,甚至可以做到)
要解決這個問題,我會想,在某個時間點,摧毀服務。
stopService(new Intent("net.MyService.intent));
這工作得很好,是很容易在手機上驗證,但是,上面創建的線程即使在t時也會繼續運行他產生的服務被破壞了。
我正在尋找正確的命令來插入服務的onDestroy()這將清理線程給我。
t.destroy();
t.stop();
都折舊並導致應用程序崩潰。
我把這個代碼從某處
@Override
public void onDestroy() {
Thread th = t;
t = null;
th.interrupt();
super.onDestroy();
}
,但它仍然無法正常工作,線程繼續運行。任何幫助傢伙?
該鏈接基本上重新迭代我所面臨的所有問題和約束。鏈接講述如何使用interrupt()代替stop(),這正是我正在做的。 interrupt()的問題是它只能用於sleep(),wait()和join()。在我的代碼中,掛起的行不是這些,它從來沒有恢復,甚至在一個小時後。線程卡在那條線上,沒有中斷可以將其解救出來。 – foodman 2011-04-14 09:05:53