安卓四大组件之服务及简单Demo

定义:

服务是安卓实现后台运行的解决办法,适合执行那些在后台却要求运行的任务。服务的运行不依赖于任何用户界面,只有当程序进程被杀死的时候,所有依赖于该进程的服务也会停止运行。

服务不会开启线程,所有的代码都是默认运行在主线程中。也就是说,我们需要在服务的内部手动创建子线程,并在这里执行具体的任务,否则就会出现主线程被阻塞住的情况

服务的生命周期

安卓四大组件之服务及简单Demo安卓四大组件之服务及简单Demo

总结:

startService后为onCreate(第一次)和onStartCommand,结束stopService或stopSelf。只会产生一个服务实例

bindService后为onCreate(第一次)和onBind(返回一个IBinder对象实例用于通信),结束为unbindService

同时调用startService和bindService,结尾需要同时调用stopService和unbindService

服务的基本用法

新建一个服务类,继承自Service。然后对其中的方法进行重写,再进行调用。

安卓四大组件之服务及简单Demo

然而服务一般都有通信的功能,所以需要给服务绑定(onBind()).

例如希望在MyService中提供一个下载功能(意思一下,另外文章补充)

思路是创建一个专门的Binder对象来对Bind对象的下载功能进行管理

1.在MyService中新建一个DownLoadBinder,继承自Binder,在其内部写具体方法。

接着创建这个DownLoadBinder对象实例,最后在onBind方法中返回这个实例。这样就可以使用其中的方法了。

安卓四大组件之服务及简单Demo

安卓四大组件之服务及简单Demo

2.在活动绑定服务,就可以调用改服务中的Binder提供的方法

首先创建一个ServiceConnection的匿名类,在里面重写了onServiceConnected()方法和onServiceDisconnected()方法。这两个方法会在绑定成功和解除绑定时调用。

在下方使用bindService()方法使得活动(MainActivity)和服务(MyService)进行绑定。该方法接收三个参数,第一个是Intent对象,第二哥是ServiceConnection的实例,第三个是标志位,这里传入BIND_AUTO_CREATE表示活动服务绑定后自动创建服务(onCreate方法得到执行,但onStartCommand方法不会执行)

安卓四大组件之服务及简单Demo

安卓四大组件之服务及简单Demo

另外,解绑服务如下

安卓四大组件之服务及简单Demo