2016-10-13 59 views
1

我在Activity中使用getApplication()。bindService()或bindService()。 比另一個更好。考慮到Activity具有生命週期,在什麼情況下,應用程序上下文將用於啓動/綁定到服務。調用哪個上下文startService

+0

檢查這個答案[鏈接](http://stackoverflow.com/questions/6446221/get-context-in-a-service),它對這兩個概念有一些澄清。 –

回答

4

對於從活動結合到服務,使用Application上下文(getApplication())。這是因爲綁定本身表示需要作爲配置更改處理的一部分進行處理的狀態(例如,通過onRetainNonConfigurationInstance())。一個活動實例可能會綁定,但是在配置更改之後,您可能不會解除綁定。使用Activity作爲Context對於bindService()可能引入了內存泄漏(新的活動將間接引用保留回綁定到服務的原始活動)。

但是,起始來自活動的服務不涉及活動中的框架強制狀態。因此,在活動本身上使用startService()開始服務應該沒問題。

+0

老實說,我從來沒有見過任何'Activity'在'Application'上下文中調用'bindService','bind' /'unbind'請求應該配對,所以不會有泄漏的機會... – pskink

+0

@pskink:如果你作爲配置更改的一部分,服務可能會在您有機會再次綁定新活動之前關閉。現在,如果您確定其他內容正在使服務保持運行(例如,它已被綁定並啓動),那麼這可能不是問題。 – CommonsWare