1

我在这里找到并阅读了关于 SO 的各种帖子,其中提到getApplicationContext()在绑定到 a Service- 而不是this(in an Activity) 或getActivity()(in a Fragment) 时应该使用。

但是,这对我提出了以下问题:文档反复谈论 a 的“客户端” Service,例如:“当服务与所有客户端解除绑定时,Android 系统将其销毁”(http://developer.android.com /guide/components/bound-services.html)。

在这种情况下,客户是什么意思:

  • 那个Context用来打电话的bindService()
  • ServiceConnection提供给bindService()

假设我有两个Fragments绑定到相同的Service- 使用应用程序上下文并且每个都有自己的ServiceConnection.

服务何时会被销毁?

如果我的第二种解释是正确的,Service那么当所有连接都关闭时,即当每个 Fragment 调用getActivity().getApplicationContext().unbindService(mConnection). 如果第一个是真的,它应该在第一个 Fragment 进行调用时立即关闭,因为这将“取消绑定应用程序上下文”......

那么,哪种解释是正确的呢?(希望是第二个……)

4

1 回答 1

2

您使用getApplicationContext()以便ServiceConnection生存,例如活动方向发生变化(活动被破坏并重新创建,它的上下文也是如此)。根据文档,当活动停止(未销毁)时,服务可能会断开连接。

“客户”是任何持有活跃ServiceConnection. 当没有人连接到服务时,它不再需要并因此被销毁(除非也由 启动startService(...))。ServiceConnections 不计入上下文。

如果所述片段被破坏,我还没有测试连接是否会自动关闭。我的猜测是否定的,因为应用程序上下文仍然存在——你必须在onDestroy.

于 2014-11-10T20:15:02.900 回答