是更好地绑定服务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