是更好地綁定服務FragmentActivity
:將服務綁定到FragmentActivity或Fragment?
bindService(Intent, ServiceConnection, int);
或Fragment
:
getActivity().bindService(Intent, ServiceConnection, int);
什麼是更好的做法?
是更好地綁定服務FragmentActivity
:將服務綁定到FragmentActivity或Fragment?
bindService(Intent, ServiceConnection, int);
或Fragment
:
getActivity().bindService(Intent, ServiceConnection, int);
什麼是更好的做法?
是更好地綁定服務FragmentActivity ...或分片
他們是一樣的,你有他們在這裏寫的。 getActivity()
不是Fragment
- 它是一種返回Activity
的方法。 Fragment
上不能撥打bindService()
。
什麼是更好的做法?
都沒有。綁定到Application
對象,通過getApplicationContext()
獲得,ServiceConnection
(或者實際上爲)保留Fragment
。
原因是配置更改。綁定是狀態。您需要通過配置更改來維護該狀態。雖然保留的Fragment
可以保留在ServiceConnection
上,但系統之間的隱式綁定在ServiceConnection
和Context
之間,它們將其註冊爲綁定。由於活動可以在配置更改時被破壞和重新創建,因此Activity
在這裏不是Context
的好選擇。 Application
,這是全球系統,是一個更安全的選擇,並選擇Application
在另一個Context
少數幾個地方之一是一個明智的舉動恕我直言。
Here is a blog post我的,從片段前的時間,進入這一點多一點。 Here is a sample project演示技術。
請你分享一下你的意見:http://stackoverflow.com/questions/24309379/bind-service-to-activity-or-fragment – Anjani 2014-06-19 14:44:54
看着你的演示,看起來你正在泄漏內存。您在保留的Fragment中保留對UI元素的引用,因此即使配置可能已更改,仍舊會引用舊的Context。我會保持UI元素在一個單獨的片段。 – mkuech 2015-03-02 16:42:40
@mkuech:該UI元素在'onCreateView()'中設置爲一個新值。因此,在配置更改之後,該片段不再保留在舊小部件中。 – CommonsWare 2015-03-02 16:44:41