Java 获取一个对象";碎片管理器“;在;服务“;

Java 获取一个对象";碎片管理器“;在;服务“;,java,android,service,Java,Android,Service,是否可以在“服务”中获取对象“FragmentManager”?是否可以从“服务”中的“活动”传递对象“FragmentManager” PS:包括官方不支持的功能 是否可以在“服务”中获取对象“FragmentManager” 不,对不起 是否可以从“服务”中的“活动”传递对象“FragmentManager” 那将是一个非常糟糕的主意 如果您希望您的服务更新您的UI,请记住可能没有UI。欢迎用户按返回或主页按钮退出UI,即使您的服务正在运行 还要记住,它可能是一个不同的UI。例如,当用户将设

是否可以在“服务”中获取对象“FragmentManager”?是否可以从“服务”中的“活动”传递对象“FragmentManager”

PS:包括官方不支持的功能

是否可以在“服务”中获取对象“FragmentManager”

不,对不起

是否可以从“服务”中的“活动”传递对象“FragmentManager”

那将是一个非常糟糕的主意

如果您希望您的服务更新您的UI,请记住可能没有UI。欢迎用户按返回或主页按钮退出UI,即使您的服务正在运行

还要记住,它可能是一个不同的UI。例如,当用户将设备从纵向旋转到横向时,您的活动(以及默认情况下的片段)将被销毁并重新创建。或者,用户可以点击将不同的活动带到前台的东西,并且该活动有自己的片段和管理器

因此,要让服务更新UI,您需要使用支持这种解耦操作的通信路径,例如:

  • 广播
  • 使用
    LocalBroadcastManager
  • 通过
    ContentProvider
    更新内容,使用
    CursorLoader
    ContentObserver
    的活动将收到有关数据更改的通知
  • 等等

也就是说,即使我能够将FragmentManager转移到servise。当用户旋转设备时,它(FragmentManager)将变得无效(对于从中获取它的活动)?对吗?@K.G.V.:“当用户旋转设备时,它(FragmentManager)将变得无效(对于从中获取它的活动)?--可能。我没有查看底层实现,以查看管理器本身是否在配置更改中保留。不同的活动(例如,活动A和活动B)肯定有不同的
FragmentManager
实例。请尝试使用LocalBroadcastManager。但是一个新的问题是:如果我的活动不是活动的,那么它可以从缓存中删除。然后它将停止接收消息。是否可以设置一个标志,以便不从缓存中删除活动?@K.G.V:如果用户按BACK,则您的活动将被销毁,并且没有任何消息可接收。如果您创建该活动的新实例(例如基于用户输入),它将需要查询您的数据库或其他内容以获取当前状态。在任何其他情况下(如用户按HOME键),您的活动仍然存在。“是否可以设置一个标志,以便不从缓存中删除活动?”--不,不超过您可以在Web应用中设置一个标志,以防止用户切换到其Web浏览器中的其他页面。