这是我参与「第四届青训营 」笔记创作活动的第[5]天
Service
-
Service是四大组件之一。Service是一个长期在后台执行,而不用提供用户界面的引用组件。服务可由其他应用组件启动,即使切换到其他应用组件,即使切换到其他应用组件,服务还是在后台运行的。- 组件可以绑定到服务,可以进行交互,或者是执行进程间的通信。
- 服务可以处理网络通信,播放音乐、电源、执行文件I/O,这都是后台运行的。
- 两类服务
- 本地服务(Local Service)
- 远程服务(Remote Service)
-
用法
- 注册:
AndroidManifest中使用<Service.../>标签 - 创建:建立相应的
Service实现类 - 加载:
startService()/bindService()
- 注册:
-
手动调用的方法
startService()启动服务stopService()关闭服务bindService()绑定服务unbindService()解绑服务
-
内部自动调用的方法
onCreat()创建服务onStartCommand()开始服务onDestroy()销毁服务onBind()绑定服务onUnbind()解绑服务
-
启动方式
Service自己不能独自运行,需要通过某一个Activity获取其他context对象来调用。Service的启动方式有两种:- 通过
startService//在Activity中启动Service` //ServiceTest.java为实现Service的子类 Intent intent = new Intent(this, ServiceTest.class); //启动Service startService(intent); //停止Serivce stopService(intent); - 通过
bindservice//需要一个Binder的子类,里面写一个方法从Activity中调用Service里面的方法。 //ServiceTest.java为实现Service的子类 ServiceConnection conn = new ServiceConnection() Intent intent = new Intent(this,ServiceTest.class); bindService(intent,conn,BIND_AUTO_CREATE); //在需要解除绑定服务的地方 unbindService(conn);
- 通过
-
Service与Activity通信- 1.定义
Binder子类,并实现getService()方法。 - 2.实现
Service类onBind()方法,返回上述Binder对象。 - 3.实例化
ServiceConnection对象,实现onServiceConnected()方法,从中获取到Service实例。 - 4.
Activity中调用bindService()方法,并传递步骤3的ServiceConnection对象,将流程跑起来。 - 5.
Activity即可以通过调用Service实例中的方法进行直接通信。
- 1.定义
-
生命周期
Service整体的生命时间是从oncreate()被调用开始,到ondestroy()方法返回为止。和activity一样,service在oncreate()中进行它的初始化工作,在ondestroy()中释放残留的资源。startservice()的方式:oncreate() ==>> onstartcommand() ==>> onstart() ==>> ondestroy()bindservice()的方式:oncreate() ==>> onbinder() ==>> onunbind() ==>> ondestroy()onunbind()方法返回后就结束了。