Android 服务(二)BindService

来源:互联网 发布:unity3d texture2d 编辑:程序博客网 时间:2024/06/05 16:08

一 服务除了上一篇提到的方式,还有一种就是BindService,那么大家肯定有疑问了,为什么会采取BindService这种方式呢?

1、采用Bound Services方式,不仅可以启动服务,还可调用服务里面的方法;
  

2、但BindService方法不会引发OnStartCommand事件,故也无StartCommandResult可利用;绑定的意义在于服务方法的调用;

也就是说,当我们想调用服务里面的某一个方法时,就需要BindService这种形式了。

所以绑定服务的意义完全在于调用服务里面的方法。

二 服务的生命周期(从创建到销毁)有两条路径:

被启动的服务(startedservice)

         当服务被一个组件通过startService()函数启动后,这个服务就会独立的运行,必须被自己用stopSelf()函数或者其他组件用stopService()函数来停止。一旦服务被停止,系统就会销毁它。

绑定的服务(bound service)

         当一个服务被另一个组件通过bindService()函数创建后,客户就会通过IBinder接口和服务进行交互。客户可以通过unbindService()函数关闭连接(解除绑定 )。多个客户可以绑定到同一个服务,当所有客户都关闭和服务连接(解除绑定 )后,系统会销毁服务(服务没有必要自己停止自己)。

 

这两条路径并不是完全分离的。这是因为你可以绑定一个被启动的服务(started service)。例如,一个音乐播放服务可能被startService()函数启动来播放一首歌曲。过了一会儿,可能用户想要在播放器做一些操作或者获取关于当前歌曲的信息,一个activity就会通过bindService()函数绑定到该服务。started service + bindService 这种情况下,调用stopService()或 stopSelf() 不会真的停止服务,直到所有绑定的客户都解除绑定(关闭连接)。



0 0
原创粉丝点击