Developer--Services

来源:互联网 发布:物品记录软件 编辑:程序博客网 时间:2024/06/04 18:18

1、综述

service是能够在后台长期run的应用组件,不提供用户接口。另一个应用组件能够start一个service,即使用户转向另一个应用,后台的service也会保持。甚至,一个组件能够绑定到一个service,然后进行IPC(进程间通信)。举例,一个service能够处理网络请求,播放音乐,与content provider交互等。


2、Service的两种方式

1)Started :一个应用组件(比如 activity)startService().一旦开始,Service会无限期的运行,即使创建它的组件destroy掉。但是,如果服务是下载file,当这个操作完成时,这个服务自己就会停止。

2)Bound:应用组件和service bind在一起,通过 bindService()。一个bound service提供 客户-服务端 接口,允许组件和服务交互,发送request,得到结果,甚至进行IPC。但是,这个时候,service依赖于绑定在一起的application,解除bound之后,serice就destroy了。


注意:service不会自己创建一个线程,最好的方法是你在service里面创建一个新线程去完成耗时操作,以降低ANR(Application Not Responding) 错误,保持主线程的优雅。

3、重要方法

两部分,一部分是重要的回调方法,一般复写在onStarCommand()里面,一部分是提供组件绑定到service的机制。

onStartCommand():通过startService()方法 调用stopSelf() 或 stopService()结束

onBind():通过bindService()需要提供交互的接口,返回IBinder。如果不允许bind,返回空

onCreate():service首次创建时调用,如果已经run,不调用

onDestroy():释放资源


注意,service需要在manifest注册。

开发者文档里也讨论了什么时候会kill掉service,什么service可能会一直run。

下面是生命周期图。






0 0
原创粉丝点击