已启动并绑定的Service的生命周期是什么?

7

我对服务生命周期感到困惑。
我有以下几个问题:

  1. 如果我的应用程序多次调用 startService() 来启动一个服务,会同时运行多个服务吗?还是只有一个?

  2. 首先,如果我在我的应用程序中多次调用 bindService() 来绑定一个服务,会发生什么?

  3. 假设我有一个通过 startService() 启动的服务,然后稍后我绑定它以指示它执行某些操作。在这种情况下,如果我通过 Binder 接口指示服务执行其 stopSelf() 方法,正在运行的服务是否会立即停止?

  4. 再假设我有一个只能通过 bindService() 启动的服务,并且 onUnbind 被重写以返回 true,在这种情况下,我应该显式调用 stopSelf 方法来关闭服务吗?

2个回答

4
  1. 在Android设备上,只存在一个Service实例。启动服务仅会启动一次,其他启动调用将导致重复调用onStartCommand,但不会启动同一服务的新实例。

  2. 如果通过绑定方式启动绑定服务,并且这是第一次使用该服务,则会创建一个新实例并调用onBind方法。

  3. 是的。但是,由服务启动的线程和由服务注册的监听器将被泄漏。您应该在onDestroy方法中处理这些资源。

  4. 无需调用stop self。当最后一个用户取消与服务的绑定时,服务会自动销毁。


-1

是的,您可以同时运行多个服务。但是如果您正在使用服务,则必须小心使用。如果您要启动服务,则必须在任何方法(例如onDestroy()或自定义方法)上停止该服务,因为无论何时完成活动,服务仍在后台运行。

还有一件事:仅在需要后台处理(如媒体播放器)时才使用服务;否则,您可以通过活动实现所有这些功能。

有关更多信息,请阅读Android开发人员服务文档。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接