2017-01-02 141 views
0

我的Android應用程序中的後臺工作是通過交流順序進程完成的,意思是監聽BlockingQueue上的命令的線程。Android onPause:爲什麼要停止線程?

線程/演員在MainApplication中初始化。

停止一個Activity.onPause期間這些線程帶來了一些併發症,例如在BlockingQueue一些命令可以onResume被調用之前到達

問題1:爲什麼還要在期間阻止這些線程?他們處於阻塞狀態,沒有做任何工作,所以他們不應該有任何性能影響。

問題2:當調用然後onDestroy被調用時,這些線程發生了什麼? ART會殺死他們嗎? .interrupt()他們?有沒有暫停?

+0

*沒有做任何工作*他們沒有檢查是否有任何工作要做? –

+0

線程處於等待狀態。 –

回答

2
  1. 你的問題是基於意見的,但不阻止它們可能會造成一些性能。作爲一般的經驗法則,當用戶界面沒有向用戶顯示時(在onStop之後),您應該停止所有工作。所以,如果讓他們處於等待狀態就夠了,那就取決於你了。

  2. onDestory僅「銷燬」您的Activity實例而不是您的VM實例(或進程)。其他單例對象或未被垃圾收集的對象將保持活動狀態,包括後臺線程。

+0

它不會破壞我的MainApplication,或者它?線程從那裏開始。 –

+0

不是不。但你必須明白,一旦你的應用程序沒有任何活動組件(Activity,BroadcastReceiver,Service等),Android可能會完全中止你的應用程序/進程,而沒有任何警告清理RAM內存,以便其他應用程序可以使用它。因此,在極端情況下(低內存設備),您的線程可能會最終停止。 –