2013-07-03 28 views
0

我有一個線程基本上是這樣的:如果從BlockingQueue中拉出的工作線程永遠不會在android中退出,那麼可以嗎?

public void run() throws InterruptedException { 
    while(true) { 
     String curUrl = taskQueue.take(); 
     ... 
    } 
} 

我知道我可以改變true一個volatile變量,並將其設置爲false,當我不再需要它,但它是在我的應用程序中使用,所以很難說它什麼時候不再需要。

我想知道如果有一個無限循環將會對Android VM的其他部分的性能產生明顯的影響,如果它仍然處於阻塞狀態,即使我的應用程序沒有運行。

編輯1:啓動線程的代碼只會啓動它,如果它尚未運行。

+1

如果你不停地啓動和停止你的應用,那麼這些事情會不斷積累嗎? – stark

回答

1

由於taskQueue是一個阻塞隊列,所以沒有。讓這個線程在應用程序的整個生命週期中運行不會引起任何明顯的影響。

如果TaskQueue不是阻塞,那麼它會。您的應用程序將盡可能快地消耗接近完整的處理能力核心。

阻塞隊列將導致線程調用方法'take'暫停,直到有可用的結果返回。非阻塞隊列將返回null或拋出異常。

+0

由於'take()'方法是在'BlockingQueue'接口中定義的,而不是'Queue'中的,所以我認爲我們可以安全地假設隊列是阻塞隊列。 – Jules

+0

...好點。沒有重讀標題。 –

1

Android將在您的應用程序未被使用時終止您的應用程序,並且這將包括終止您的等待線程,因此通常在用戶切換到其他任務後不會停留很長時間。如果很難知道何時不再需要,我不會擔心。

相關問題