假设活动A启动服务S并绑定到服务S.
当A被摧毁时,S会发生什么?
如何重新创建另一个绑定到S的Activity? http://developer.android.com/guide/components/bound-services.html中的示例代码解除了onStop()中的服务绑定。我想如果我再次打开应用程序,就会为A和S的另一个实例创建一个新进程。但我希望新活动从旧服务中获取数据。
答案 0 :(得分:4)
What will happen to S when A is destroyed?
如果A是绑定到S的唯一活动,并且您没有通过startService(Intent)
启动服务,则S将被销毁。这是因为服务将一直存在,直到最后一个绑定的Activity从服务解除绑定。记录在案here。
How can I recreate another Activity that binds to S?
如果绑定A并通过Intent切换到Activity B,则服务将被销毁并在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()
明确停止服务,它就独立于活动并在后台运行。您甚至可以在自己的应用程序中使用服务并使用IPC在应用程序之间进行通信。这完全是用例的问题。
正如您所看到的,服务的配置非常灵活,您必须决定哪种服务最适合您的应用。
答案 1 :(得分:0)
如果您通过startService()
开始服务,它将在活动结束后继续保留。
如果您通过bindService()
开始服务,它将一直存在,直到最后一个活动取消它。
此外,如果服务已经启动并且您调用startService()
,则不会创建新的服务实例,但在生活服务方法onStartCommand()
中将执行。
onBind()
。