2012-02-23 50 views
2

我有一個應用程序創建一個線程來完成一些工作。當工作完成後,我殺死線程。問題是,每次我殺死線程時,堆似乎增加了10K?爲了進一步測試,我在1ms處理程序中做了以下操作。在Android中創建和消除線程

TestThread new_thread = new TestThread(); 
new_thread = null; 

每次我運行這個,我看到DDMS下的堆增加。 TestThread什麼都不做。它沒有代碼。它只是一個空的線程。

import android.util.Log; 

public class TestThread extends Thread { 

    public TestThread() { 
    Log.d("TESTTHREAD","Constructed"); 
    } 

    public void run() { 
     Log.d("TESTHREAD","Run"); 
    } 
} 

任何想法,爲什麼這是?

回答

1

不推薦使用myThread.stop()方法,因爲它可能使應用程序處於 不可預知的狀態。相反,使用下面的需要時,如在的onStop()父組件的 方法:

//use to stop the thread myThread 
if(myThread != null) { 
    Thread dummy = myThread; 
    myThread = null; 
    dummy.interrupt(); 
} 
+0

感謝您的評論,但我甚至沒有啓動線程。我不停止它。我只是創建一個新的實例。然後將該實例設置爲null。我認爲這將意味着Android清理了未使用的線程實例? – 2012-02-23 12:15:38

+0

創建線程的新實例是否真的是一件壞事,只會持續很短的時間,然後被刪除?我一直想在我的軟件中做很多。我現在想知道如果這只是一個不好的做法。即使在我監視DDMS中的事件時顯示線程被移除時,內存始終被分配,直到活動本身被銷燬。 – 2012-02-23 18:51:46