Android服务:活动结束时会发生什么?

时间:2013-09-13 06:29:01

标签: android android-service android-lifecycle

假设活动A启动服务S并绑定到服务S.

  1. 当A被摧毁时,S会发生什么?

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

2 个答案:

答案 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()