4

假设 Activity A 启动 Service S 并绑定到 Service S。

  1. 当 A 被破坏时,S 会发生什么?

  2. 如何重新创建另一个绑定到 S 的 Activity?http://developer.android.com/guide/components/bound-services.html中的示例代码在onStop() 中取消绑定服务。我想如果我再次打开应用程序,将为 A 和 S 的另一个实例创建一个新进程。但我希望新活动从旧服务获取数据。

4

2 回答 2

4
What will happen to S when A is destroyed?

如果 A 是唯一绑定到 S 的 Activity 并且您没有通过 启动服务startService(Intent),则 S 将被销毁。那是因为服务将一直存在,直到最后一个绑定的活动从服务中解除绑定。这在此处记录。

How can I recreate another Activity that binds to S?

如果 A 被绑定,而你通过 Intent 切换到 Activity B,则 Service 将在 B 绑定到它时被销毁并重新创建。

如果您希望服务即使没有绑定任何活动也仍然有效,您必须使用startService(Intent). 现在,如果您明确停止它或系统意味着是时候销毁它,它就会存在。如果您不希望这种行为,请保留您的数据并在给定时间访问它。

I think if I open the app again, a new process is created for another instance of A and S

该进程保持不变,直到该进程从系统中被终止,或者如果您终止该进程,这是不推荐的。

编辑:

只有绑定的服务生命周期依赖于活动。如果你想要一个独立的使用startService()。这样它就独立于活动并在后台运行,只要应用程序的进程启动或您使用stopService() / stopSelf(). 你甚至可以在自己的 App 中拥有一个 Service,并使用 IPC 在 App 之间进行通信。这完全取决于用例。

如您所见,服务的配置非常灵活,您必须决定哪个最适合您的应用程序。

于 2013-09-13T09:55:08.647 回答
0

如果您通过startService()它启动服务,它将在 Activity 完成后保持剩余。如果您通过bindService()它启动服务,它将一直存在到最后一个 Activity 不受它限制。此外,如果服务已经启动并且您调用startService()不会创建新的服务实例,但onStartCommand()将执行生活服务方法。当您绑定到生活服务时,几乎相同,methononBind()将被执行。

于 2013-09-13T06:38:22.233 回答