Android---服务(Service)的绑定服务

BindService

 

1、绑定服务

 

1.1绑定方式

 

通过服务链接(ServiceConnection)或直接获取Service中状态和数据信息 

服务链接能够获取Service的对象,因此绑定Service的组件可以调用 

Service中的实现的函数 

使用Service的组件通过Context.bindService()建立服务链接,通过 

Context.unbindService()停止服务链接 

如果在绑定过程中Service没有启动,Context.bindService()会自 

动启动Service 

同一个Service可以绑定多个服务链接,这样可以同时为多个不同的 

组件提供服务

1.2如何绑定service

 

step1.新建一个类MyService,继承Service 

step2.Manifest.xml文件中声明<serviceandroid:name=".MyService"/> 

step3.绑定 

复制代码

Intent intent =new Intent(context,MyService.class);
ServiceConnection conn = new ServiceConnection(){
        public voidonServiceDisconnected(ComponentName name) {
            Log.i("Service","onServiceDisconnected===");
        }
        public voidonServiceConnected(ComponentName name, IBinder service) {
            Log.i("Service","onServiceConnected===");
       }
}
context.bindService(intent,conn,Context.BIND_AUTO_CREATE);

调用者通过bindService()函数绑定服务 

并在第1个参数中将Intent传递给bindService()函数,声明需要启动的Service 

3个参数Context.BIND_AUTO_CREATE表明只要绑定存在,就自动建立 

Service;同时也告知Android系统,这个Service的重要程度与调用者相同, 

除非考虑终止调用者,否则不要关闭这个Service

解除绑定 

context.unBindService(conn);

说明: 

1.   unbindService(conn)//不可以多次调用 

2.关于ServiceConnection的两个方法: 

当连接上service时,会调用onServiceConnected方法 

当连接上后,service被后台停止,那么此时会调用onServiceDisconnected方法

 

1.3绑定Service的生命周期

 

绑定:如果service没被创建,那么调用一次onCreate(),然后调用onBind() 

多次绑定时,不会多次调用onBind() 

解除绑定:调用onUnbind(),然后onDestory().不可以多次调用unbindService()方法解除绑定。

 

1.4启动方式和绑定方式的结合

 

这两种使用方法并不是完全独立的,在某些情况下可以混合使用 

MP3播放器为例,在后台的工作的Service通过Context.startSer 

vice()启动某个特定音乐播放,但在播放过程中如果用户需要暂停 

音乐播放,则需要通过Context.bindService()获取服务链接和Serv 

ice对象,进而通过调用Service的对象中的函数,暂停音乐播放过 

程,并保存相关信息。在这种情况下,如果调用Context.stopServ 

ice()并不能够停止Service,需要在所有的服务链接关闭后,Serv 

ice才能够真正的停止

生命周期: 

第一次点击:不管是startService还是bindService,如果service还未存在,那么会调用 

onCreate,之后如果是startService那么调用onStartCommand(),如果是 

bindService那么会调用onBind() 

之后,如果再调startService(),那么会调用onStartCommand();如果再调用 

bindService那么如果第一次点击是bindService,那么就不会调用onBind(),否则 

什么方法都不会被调用。

bindService后,不能stopService,需要通过unBindService()来解除绑定。

只是startService()后,不可以通过unBindService()来销毁service

 

serviceActivity处于同一个线程。

1.5服务绑定

通过bindService()函数绑定Servcie时, onCreate()函数和onBinde() 

数将先后被调用 

通过unbindService()函数取消绑定Servcie时,onUnbind()函数将被调用, 

如果onUnbind()函数的返回true,则表示在调用者绑定新服务时, 

onRebind()函数将被调用

取消绑定仅需要使用unbindService()方法,并将ServiceConnnection 

传递给unbindService()方法 

需注意的是,unbindService()方法成功后,系统并不会调用 

onServiceDisconnected(),因为onServiceDisconnected()仅在意外断开 

绑定时才被调用

1.6Service的原理和用途

 

startService()的目的是回调onStart()方法,onCreate() 方法是在Service 

不存在的时候调用的,如果Service存在(例如之前调用了bindService,那 

ServiceonCreate方法已经调用了)那么startService()将跳过onCreate 

() 方法。 

bindService()目的是回调onBind()方法,它的作用是在Service和调用者之 

间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器 

的操作),一般使用bindService来绑定到一个现有的Service(即通过 

StartService启动的服务)。

 

来自 <http://www.cnblogs.com/feike/archive/2013/01/03/2843023.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值