2011-06-03 70 views
2

我在活動中創建了一個線程。起初,我認爲在Activity上調用onDestroy()時,線程也會被終止。但是我錯了。線程仍然繼續運行。我應該何時取消/殺死一個線程?

所以我決定取消onDestroy()方法中的線程。一切正常。

但是有1個問題:onDestroy()不保證被調用。例如:Activity被操作系統突然中止。

那麼在這種情況下最好的做法是什麼?謝謝。

回答

1

你應該做一切有關清理onPause()。你是正確的,onDestroy()不會總是被調用,但onPause()總是被調用時,活動移動到後臺或被殺害。但要小心使這個方法中的代碼真的很輕量級,因爲在這個方法返回之前,一個活動不能進入後臺。

+0

我也想過它宣佈所有MyApplication,但如果)活動的的onPause(簡稱只是因爲在它上面還有另一個Activity,如果線程正在下載某些內容,取消該線程是沒有意義的。 – namanhams 2011-06-04 08:18:09

+0

你什麼時候需要準確地停止線程?如果您希望下載在您的活動從屏幕上消失後繼續運行,您可能需要在服務中下載內容。如果你正在做一些後臺任務,你不應該依賴活動狀態。 – Malcolm 2011-06-04 11:51:00

-2

我提議把Thread殺害ApplicationonTerminate方法

public class MyApplication extends Application 
{ 
    MyThread myThread; 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     myThread=new MyThread(); 
     myThread.start(); 
    } 

    @Override 
    public void onTerminate() 
    { 
     super.onTerminate(); 
     myThread.interrupt(); 
    } 
} 

確保在AndroidManifest.xml

+0

-1:此信息具有誤導性。從這種方法的Android文檔:「它永遠不會被生產的Android設備調用,通過簡單地殺死進程來刪除進程;這樣做時不會執行用戶代碼(包括此回調)」。 – Malcolm 2011-06-04 11:53:26

+0

永遠不會知道 - thanx! – barmaley 2011-06-05 18:42:40