Android之service生命周期及启动方式

服务的用途

如果不给应用提供用户界面,应该怎么做呢?如果不用看,不用操作,只要任务在后台运行就行了,如播放音乐,又该怎么做呢?好办,使用服务service)吧。与activity一样,服务是一个有生命周期回调方法的应用组件。这些回调方法同样会在主UI线程上运行。


服务的生命周期

                官方的生命周期图

Android之service生命周期及启动方式_第1张图片

回调方法

onCreate(…)方法:服务创建时调用;
onStartCommand(Intent,int,int)方法:每次组件通过startService(Intent)方法启动服务时调用一次。
onBind(Intent)方法:每次绑定服务时调用。
onUnbind(Intent)方法:服务绑定终止时调用。
onDestroy()方法:服务不再需要时调用。


服务的两种启动方式

startservice模式

在同一个应用任何地方调用 startService() 方法就能启动 Service 了,然后系统会回调 Service 类的 onCreate() 以及 onStart() 方法。这样启动的 Service 会一直运行在后台,直到 Context.stopService() 或者 selfStop() 方法被调用。另外如果一个 Service 已经被启动,其他代码再试图调用 startService() 方法,是不会执行 onCreate() 的,但会重新执行一次 onStart() 。

bindservice模式

另外一种 bindService() 方法的意思是,把这个 Service 和调用 Service 的客户类绑起来,如果调用这个客户类被销毁,Service 也会被销毁。用这个方法的一个好处是,bindService() 方法执行后 Service 会回调上边提到的 onBind() 方发,你可以从这里返回一个实现了 IBind 接口的类,在客户端操作这个类就能和这个服务通信了,比如得到 Service 运行的状态或其他操作。如果 Service 还没有运行,使用这个方法启动 Service 就会 onCreate() 方法而不会调用 onStart()。

两种启动方式的区别

startService() 的调用者与服务没有联系,即使调用者退出了,服务仍然运行,而bindService() 的调用者与服务绑在一起,调用者一旦退出了,服务也随即终止掉。

你可能感兴趣的:(android)