2014-04-02 51 views
0

對不起,傢伙沒有太多的代碼發佈。 我有以下程序結構。CountDownLatch是否可以在Android服務中使用?

MyService{ 

initialize CountDownLatch to 2 
call InterntService1 - in the end of IntentService1 decrement the latch's counter 
call IntentService2 -in the end of IntentService2 decrement the latch's counter 
latch.await() 
} 

我現在面臨的問題是:一旦線程服務(如應用程序的主線程的一部分)開始等待,目的服務是根本不能執行。它只是在那裏等待無限。有沒有其他人面臨同樣的問題。我知道我可以使用處理程序/其他一些機制。但我的問題是,爲什麼會發生這種情況?

+0

你爲什麼不能發佈更多的代碼? –

+0

不要在主線程上使用'await'(因爲它是一種阻塞方法)。例如,如果您正在使用intentservice,則使用它非常合適。 – njzk2

回答

1

從developer.android.com:

注意:一種服務,它的託管過程中 服務的主線程中運行不創建自己的線程,並在單獨 不運行過程(除非另有說明)。這意味着,如果您的服務將執行任何CPU密集型工作或阻止操作(如MP3播放或聯網) ,則應在服務內創建一個新線程 以完成此項工作。通過使用單獨的線程,您可以降低應用程序不響應(ANR)錯誤的風險,並且應用程序的主線程可以保持專用於用戶與您的活動的交互 。

我想你需要在你的服務代碼上創建並運行一個工作線程。 看看「擴展服務類」節在以下網址http://developer.android.com/guide/components/services.html

相關問題