2016-07-31 85 views
0

在我的應用程序中,我利用後臺服務來執行一些後臺數據提取。我啓動服務使用活動和聯編服務

bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 

mConnection是ServiceConnection的實例。

在服務中,我一直提取一些數據並驗證它,如果檢查通過,我播放聲音。所以當這種情況發生時,用戶可以在活動屏幕上按下停止按鈕。這會調用解除綁定(mConnection),這會破壞停止聲音的服務。 我的查詢是,雖然服務在後臺運行,同時Android殺死了活動,那麼用戶將如何停止服務。我需要mConnection來解除綁定服務,並且我不能將mConnection存儲在onSaveInstanceState中的Bundle中。

+0

使用IntentService和Broadcast Receiver(startService調用)而不是綁定服務會不會更好?因爲它只是您想要執行的特定後臺任務,而不是許多不同的任務? –

+0

嗨馬克,我想維護活動用戶界面,以便如果用戶想停止後臺服務之間,然後他/她可以用STOP按鈕來做到這一點。 IntentService一旦啓動,將不受用戶控制。 – Mandroid

+0

爲什麼不在服務中使用Executor/Threadpool/Runnable /,這樣您仍然可以通過向Executor上的shutdownNow()發送命令來進行控制 - 這樣服務就不會綁定到Activity生命週期,並且您可以維護控制服務中的執行線程。 –

回答

1

如果您使用bindService(...)方法啓動該服務,那麼當該活動被系統殺死時,服務也將被終止。它的生命週期與活動密切相關。順便說一句,系統會殺死進程而不僅僅是活動。當您使用startService()和START_STICKY啓動服務時,這是不同的。

在你的情況下,你不必擔心。只要活動停止,您的服務也會停止。

+0

我的目標是即使父活動被Android終止,活動也會繼續工作,並且如果用戶重新訪問活動,那麼它將恢復到與之前相同的UI狀態。它可行嗎? – Mandroid