安卓四大组件之服务及简单Demo
定义:
服务是安卓实现后台运行的解决办法,适合执行那些在后台却要求运行的任务。服务的运行不依赖于任何用户界面,只有当程序进程被杀死的时候,所有依赖于该进程的服务也会停止运行。
服务不会开启线程,所有的代码都是默认运行在主线程中。也就是说,我们需要在服务的内部手动创建子线程,并在这里执行具体的任务,否则就会出现主线程被阻塞住的情况
服务的生命周期
总结:
startService后为onCreate(第一次)和onStartCommand,结束stopService或stopSelf。只会产生一个服务实例
bindService后为onCreate(第一次)和onBind(返回一个IBinder对象实例用于通信),结束为unbindService
同时调用startService和bindService,结尾需要同时调用stopService和unbindService
服务的基本用法
新建一个服务类,继承自Service。然后对其中的方法进行重写,再进行调用。
然而服务一般都有通信的功能,所以需要给服务绑定(onBind()).
例如希望在MyService中提供一个下载功能(意思一下,另外文章补充)
思路是创建一个专门的Binder对象来对Bind对象的下载功能进行管理
1.在MyService中新建一个DownLoadBinder,继承自Binder,在其内部写具体方法。
接着创建这个DownLoadBinder对象实例,最后在onBind方法中返回这个实例。这样就可以使用其中的方法了。
2.在活动绑定服务,就可以调用改服务中的Binder提供的方法
首先创建一个ServiceConnection的匿名类,在里面重写了onServiceConnected()方法和onServiceDisconnected()方法。这两个方法会在绑定成功和解除绑定时调用。
在下方使用bindService()方法使得活动(MainActivity)和服务(MyService)进行绑定。该方法接收三个参数,第一个是Intent对象,第二哥是ServiceConnection的实例,第三个是标志位,这里传入BIND_AUTO_CREATE表示活动服务绑定后自动创建服务(onCreate方法得到执行,但onStartCommand方法不会执行)
另外,解绑服务如下