回答

38

是更好地綁定服務FragmentActivity ...或分片

他們是一樣的,你有他們在這裏寫的。 getActivity()不是Fragment - 它是一種返回Activity的方法。 Fragment上不能撥打bindService()

什麼是更好的做法?

都沒有。綁定到Application對象,通過getApplicationContext()獲得,ServiceConnection(或者實際上)保留Fragment

原因是配置更改。綁定是狀態。您需要通過配置更改來維護該狀態。雖然保留的Fragment可以保留在ServiceConnection上,但系統之間的隱式綁定在ServiceConnectionContext之間,它們將其註冊爲綁定。由於活動可以在配置更改時被破壞和重新創建,因此Activity在這裏不是Context的好選擇。 Application,這是全球系統,是一個更安全的選擇,並選擇Application在另一個Context少數幾個地方之一是一個明智的舉動恕我直言。

Here is a blog post我的,從片段前的時間,進入這一點多一點。 Here is a sample project演示技術。

+0

請你分享一下你的意見:http://stackoverflow.com/questions/24309379/bind-service-to-activity-or-fragment – Anjani 2014-06-19 14:44:54

+0

看着你的演示,看起來你正在泄漏內存。您在保留的Fragment中保留對UI元素的引用,因此即使配置可能已更改,仍舊會引用舊的Context。我會保持UI元素在一個單獨的片段。 – mkuech 2015-03-02 16:42:40

+0

@mkuech:該UI元素在'onCreateView()'中設置爲一個新值。因此,在配置更改之後,該片段不再保留在舊小部件中。 – CommonsWare 2015-03-02 16:44:41

相關問題