2010-08-17 76 views
10

在應用程序上工作時,我注意到線程數始終在不斷增加 AsyncTask線程由於某種原因保持打開狀態(我確定它們完成了處理並退出)我不知道爲什麼我不斷創建更多的這種類型的線程,並且無限期地運行。 是否有任何方法來驗證這些線程是否在complition上終止? 是否有AsyncTasks線程的任何已知問題保留開放?Android AsyncTask在完成後仍然處於運行狀態

運行此:

public class DoNothingTask extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

    } 

我在debbuger每次看到一個新的線程我做new DoNothingTask().execute(null); 作爲folows

Thread[<ThreadNumber>AsyncTask#1](running)

,我的問題是,爲什麼這是?我的應用程序依賴於AsyncTask,我不能創建一個新線程,並在每個任務完成後保持活動狀態。

感謝, 圖騰

回答

10

我敲打這是我頭好,對面這個答案出來(當然,這是一個多答案的解釋):

CommonsWare解釋說:

的AsyncTask管理線程池,使用ThreadPoolExecutor創建。它將有5到128個線程。如果超過5個線程,這些額外的線程將在被移除之前最多停留10秒。 (注意:這些數字是針對當前可見的開放源代碼的,因Android版本而異)。

請單獨離開AsyncTask線程。

來源問題: AsyncTask threads never die

-2

您應該使用

thread.join 

,以確保一個線程完成。你在做這個嗎?

+3

不認爲這是適用於的AsyncTask()。 – totem 2010-08-17 11:51:02

1

我不確定這是否相關,但我也在我的一個應用程序中遇到了類似的問題。

我有一個活動,初始化TimerTask線程。任務按指定的時間間隔正確執行,但在空閒時間後,這些線程的數量似乎會增加(表明線程保持打開狀態並創建新線程)。問題在於Android VM動態加載和卸載我的應用程序。原來的線程從來沒有被用於殺死應用程序的每一個新負載,即線程初始化過去發生的地方。這就是爲什麼我的應用程序中的線程總數增加的原因。

在您的應用程序中是否也有類似的實現。

+0

nope,即時通訊創建AsyncTasks,這是一槍無論如何創建線程。 – totem 2010-08-17 11:50:40

相關問題