安卓编程技巧: Service的生命周期
在安卓编程过程中,有时候需要在后台跑一个服务,这时候就需要了解Service的知识,这一期呢,我们来看一下Service的生命周期。
服务运行的目的是在后台处理一些需要长时间才能完成的操作。不提供任何的用户界面。
服务可以由一个程序组件来启动,程序进程退出后仍然可以继续运行。
服务也可以跟一个程序组件进行绑定。
服务可以用来进行进程间的通信。比如说服务可以处理网络的操作,播放音乐,处理文件输入输出,可以跟content provider进行交互。
目前有三种类型的服务。
前端服务
前端服务主要给用户提供一些提示性的消息,通过notification来实现这一目的。比如说你下载一个文件,完成下来以后需要通知用户。即使用户不与程序进行交互,前端服务也依然可以保持运行。
后端服务
后端服务主要用来做一些不需要用户知道的操作。比如说数据的加密和解密,数据的解压缩等等。
绑定服务
bindService用来实现服务的绑定,一个服务可以被多个组件进行绑定,所有的组件解绑以后,这个服务就会被消除释放掉。
绑定服务是通过client-server的机制来进行交互通信的。通过发送请求和接收请求的操作,绑定服务可以实现进程间的通信。
启动服务的两种方式
onStartCommand允许组件直接启动服务。
onBind允许组件以绑定的方式启动服务。
服务的访问权限
你可以定义你的服务为私有服务,这样只有你自己的组件可以访问他。
也可以定义为公共服务,这样任何其他的程序都可以启动你的服务。
服务的生命周期
onStartCommand
当另一个组件调用startService的时候, 这个回调函数会被调用。如果你使用了这种方式,你需要自己来终止你的服务运行。终止服务运行的方式,是调用如下两个方法stopSelf或者stopService。
onBind
当另一个组件调用bindService的时候,这个回调函数会被调用。这时你必须返回一个IBinder。通过这个返回接口,客户端才可以与这个服务进行交互通信。如果你不允许你的服务被绑定,你可以返回空。
onCreate
这个回调函数用来在创建服务时进行数据的初始化。它会在上面两个函数被调之前调用。如果服务已经被创建,这个函数不会被调用。
onDestroy
这个函数是在服务被消毁的时候调用的。在这个函数中,你需要用来释放系统的资源,比如释放掉线程,释放掉listener, 释放receiver等等。
这个是完整的服务的生命周期图。
这里是丁哥开讲,关于服务的生命周期我们就先说到这里吧,如果你有什么要说的,请给我留言,我们可以继续深入讨论,谢谢。
网友评论