2011-05-11 117 views
2

我有一個後臺線程的android應用程序,其中包含用於從服務器發送/接收數據的套接字連接。Android,退出/暫停應用程序,如何銷燬線程

如果我的應用程序結束(後退按鈕等)或暫停(主頁按鈕,調用其他應用程序),處理此後臺線程的最佳方式是什麼?

我看到2種方式:創建後,啓動線程

  • 覆蓋onStop()onPause(),或onDestroy()

  • 之前,我只是想確保

    • 呼叫Thread.setDaemon(true)我的應用程序不會掛起或有其他奇怪的行爲。

      編輯:

      另外,什麼是關閉套接字的最佳解決方案?我是否也關閉它並使用inputStream?夠了嗎?

    回答

    1

    我建議使用某種類型的信號變量:做這樣的事情

    public void run(){ 
    while(!stopped){ 
        // do work 
    } 
    
    // clean up 
    
    return; 
    } 
    

    然後在onStop()onDestroy()組停下來真的。你還需要確保你清理自己身後,如果你需要重新啓動線程,你可以在onResumeonCreate中這樣做。

    +0

    線程並不總是在背景上工作..它最終被調用,然後完成他的工作直到完成... 如果在某些工作中間發生某些事情時發生了問題,我需要清理它...因爲線程可以訪問套接字連接,所以我認爲在不結束此套接字的情況下線程不能被中斷。 雖然不知道最好的方法.. – cornelyus 2011-05-20 17:06:09

    +1

    是的,如果過程完全被殺死,那麼你有點不幸。我不確定過程kill是否調用任何生命週期方法,但是在將'stopped'設置爲true後,可以在Thread對象上放置一個'join',然後用'finally'子句關閉所有套接字工作提供套接字並執行所需的其他清理工作。 – Femi 2011-05-20 17:14:08

    +0

    嘿Femi ..關心發展呢?可能有些編碼,請問? – cornelyus 2011-06-15 16:57:10