继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

android BindService

浮云间
关注TA
已关注
手记 146
粉丝 16
获赞 47

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文件中声明<service android:name=".MyService"/> 
step3.绑定 

复制代码

Intent intent = new Intent(context,MyService.class);
ServiceConnection conn = new ServiceConnection(){        public void onServiceDisconnected(ComponentName name) {
            Log.i("Service", "onServiceDisconnected===");
        }        public void onServiceConnected(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


service和Activity处于同一个线程。

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,那 
么Service的onCreate方法已经调用了)那么startService()将跳过onCreate 
() 方法。 
bindService()目的是回调onBind()方法,它的作用是在Service和调用者之 
间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器 
的操作),一般使用bindService来绑定到一个现有的Service(即通过 
StartService启动的服务)。

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP