android四大组件之service生命周期

 和activity一样,service服务同为android的四大组件之一。而和activity不同的是,service并不会显示出来,也就是没有用户界面,它是后台运行的,但需要activity或其它context来触发。

       简单的一个例子是android手机里的音乐播放器,打开应用看得到的界面是activity,点击播放音乐启动的音乐服务则是service(听得到但看不到。例如舞台上的幕后服务者,为大家操作着音响和灯光,却从不亮相)。而且就算退出了音乐播放器,却依然能够在桌面或其它应用里面听得到音乐,那么何时停止呢,下面就开始介绍service的生命周期。

先附上service生命周期图

android四大组件之service生命周期

图中左右分别为启动service的两种不同实现方式。

两种启动方式的区别:

通过startService()(左边)

service的生命周期:

context.startService()->onCreate()->onStartCommand()->service runing-->context.stopService()->onDestroy()->service stop

startService()经过onCreate->onStartCommand()(注意这里不是onStart(),原因是onStart()方法已被淘汰,被onStartCommand()方法所取代);

stopService()的时候直接调用onDestroy()。

当调用者直接退出而不stopService()的话,service将一直在后台运行,直到下次调用者再来stopService()或被系统强杀。

通过bindService()(右边)

service的生命周期:

context.bindService()->onCreate()->onBind()->service runing-->context.unbindService()->onUnbind()->onDestroy()->service stop

bindService()经过onCreate->onBind();

unbindService()的时候调用onUnbind()和onDestroy()。

调用者通过bindService()绑定服务时,调用者与service就成了结拜兄弟(不求同时生,但求同时死),调用者退出的话service也会跟着退出。

注意:

1、service的onCreate()只会调用一次,就是无论startService或bindService多少次,service都只会创建一次。

例如第一次startService时会调用onCreate()和onStartCommand(),第二次再startService时只会调用onStartCommand(),除非stopService之后再次startService才会再次调用onCreate()。

2、在service每一次的开启关闭过程中,onStartCommand()可多次调用(通过多次startService调用),但onCreate(),onBind(),onUnbind(),onDestory()只能调用一次

3、onbindService之后不能通过stopService停止service,只能通过unbindService取消绑定之后停止。

下面通过实例来加深理解

这是一个用户界面,通过点击按钮来启动和关闭service


通过日志logcat来查看其生命周期

实验一、

1、点击startService


2、再次点击startService

实验二、
1、点击startService之后点击stopService

2、再次点击startService

实验三、

1、点击bindService

2、接着点击unbindService或按返回键退出


实验四、

1、点击bindService

2、再次点击bindService或点击stopService

实验五、

1、点击bindService之后点击startService


2、接着点击unbindService

3、接着点击stopService

原文地址:https://www.cnblogs.com/kangweifeng/p/4887390.html