gpt4 book ai didi

android - 谁是服务的 "client"- 上下文或 ServiceConnection?

转载 作者:行者123 更新时间:2023-11-29 20:58:38 28 4
gpt4 key购买 nike

我在 SO 上找到并阅读了各种帖子,其中提到您应该使用 getApplicationContext()绑定(bind)到 Service 时- 而不是 this (在 Activity 中)或 getActivity() (在 Fragment 中)。

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

这里所说的客户是什么意思:

  • Context用来调用bindService()
  • ServiceConnection提供给 bindService()

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

Service什么时候销毁?

如果我的第二个解释是真的 Service将在所有连接关闭时被销毁,即当每个 fragment 调用 getActivity().getApplicationContext().unbindService(mConnection) 时.如果第一个为真,则应在第一个 fragment 进行调用后立即将其关闭,因为这将“解除应用程序上下文的绑定(bind)”...

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

最佳答案

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

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

我还没有测试过如果所述 Fragment 被破坏,连接是否会自动关闭。我的猜测是否定的,因为应用程序上下文仍然存在 - 您必须在 onDestroy 中显式解除绑定(bind)。

关于android - 谁是服务的 "client"- 上下文或 ServiceConnection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26851872/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com