Service是android四大组件之一,可以理解为是Activity没有交互界面的一种实现方式,通常是实现后台任务的首选,比如(音乐播放,后台下载等等),本篇博客将简单介绍Service的使用和生命周期
1.创建一个Service的实现类
很简单,就是创建一个类去继承一个Service子类,查看Service类的源代码发现Service是一个抽象类,并且有一个抽象方法onBind, 重写onBind方法,就实现了一个Service的实现类
2.android的四大组件都需要注册,Service也不例外,否则不能启动服务
Service注册和Activity注册是一样的,都是在<\application>节点下声明的
在Service节点下添加了一个过滤条件,指定该如何访问该Service,但是我在启动Service的Intent中没有添加该Action,也能启动,有大神能指教下,在此谢谢
3.Service不能自动运行,需用调用启动和关闭服务,有两种方式
一、 Context.startService()启动服务,只能用Context.stopService()来关闭服务
二、Context.bindService()启动服务,只能用Context.unbindService()来关闭服务
4.Service的生命周期,为了演示Service的生命周期,将上面的Service实现类重写以下方法 onCreate() onStartCommand() onUnbind() onDestroy()
使用Context.startService()启动服务,Context.stopService()来关闭服务的生命周期如下
执行Context.startService()后,调用了onCreate和onStartCommand方法,执行Context.stopService()后调用了onDestroy方法
当Service已运行,再次执行Context.startService()后,会调用onStartCommand方法,不在执行onCreate方法,执行Context.stopService()后调用了onDestroy方法
使用Context.bindService()启动服务,Context.unbindService()来关闭服务,启动者与service绑定在一起了,启动者退出,service也跟着停止,Context.bindService(Intent, ServiceConnection, int flag) ServiceConnection:是一个接口,当服务和访问者连接成功,调用onServiceConnected()方法,断开连接调用onServiceDisconnected()方法, int参数一般传Context.BIND_AUTO_CREATE就可以了
生命周期如下
当执行Context.bindService()方法,调用了onCreate方法和onBind方法,执行完后,回调了ServiceConnection的onServiceConnected方法,绑定成功,执行Context.unbindService()方法,调用了onUnbind方法,并没有回调ServiceConnection的onServiceDisconnected方法,原因在于该方法,只是在内存不足时,异常断开连接时,才会触发,最后调用onDectory方法
当Service已启动,再次执行Context.BindService方法,没有任何响应