应用程序组件(客户端)通过调用bindService()方法能够绑定服务,然后Android系统会调用服务的onBind()回调方法,这个方法会返回一个跟服务端交互的IBinder对象。
这个绑定是异步的,bindService()方法立即返回,并且不给客户端返回IBinder对象。要接收IBinder对象,客户端必须创建一个ServiceConnection类的实例,并且把这个实例传递给bindService()方法。ServiceConnection对象包含了一个系统调用的传递IBinder对象的回调方法。
注意:只有Activity、Service、和内容提供器(content provider)能够绑定服务---对于广播接收器不能绑定服务。
因此,要在客户端绑定一个服务,必须做以下事情:
1.实现ServiceConnection抽象类
你的实现必须重写以下两个回调方法:
onServiceConnected()
系统会调用这个方法来发送由服务的onBind()方法返回的IBinder对象。
onServiceDisconnected()
Android系统会在连接的服务突然丢失的时候调用这个方法,如服务崩溃时或被杀死时。在客户端解除服务绑定时不会调用这个方法。
2.调用bindService()方法来传递ServiceConnection类的实现;
3.当系统调用你的onServiceConnected()回调方法时,你就可以开始使用接口中定义的方法来调用服务了;
4.调用unbindService()方法断开与服务的连接。
当客户端销毁时,它将于服务端解绑,但是当你完成与服务端的交互或Activity暂停时,你应该主动的与服务端解绑,以便服务能够在不使用的时候关掉。(绑定和解绑的时机会在稍后进行更多的讨论)。
例如,以下代码片段演示了把客户端连接到由继承Binder类创建服务,它所做的所有事情就是把服务端返回的IBinder对象转换成LocalService类,并且请求LocalService实例:
LocalService mService;
private ServiceConnection mConnection = new ServiceConnection() {
// Called when the connection with the service is established
public void onServiceConnected(ComponentName className, IBinder service) {
// Because we have bound to an explicit
// service that is running in our own process, we can
// cast its IBinder to a concrete class and directly access it.
LocalBinder binder = (LocalBinder) service;
mService = binder.getService();
mBound = true;
}
// Called when the connection with the service disconnects unexpectedly
public void onServiceDisconnected(ComponentName className) {
Log.e(TAG, "onServiceDisconnected");
mBound = false;
}
};
用这个ServiceConnection类,客户端能够把它传递给bindService()方法来实现与服务端的绑定,如:
Intent intent = new Intent(this, LocalService.class);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
1.bindService方法的第一个参数是一个Intent对象,它明确的命名要绑定的服务(虽然Intent能够隐含的指定);
2.第二个参数是ServiceConnection对象;
3.第三个参数是指明绑定选项的标识。通常它应该使用BIND_AUTO_CREATE,以便在服务不存在的时候创建这个服务。其他可能的值是BIND_DEBUG_UNBIND和BIND_NOT_FOREGROUND,或是什么都没有的“0”。
注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。
如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar
分享到:
相关推荐
AltBeacon的Rx绑定(Android-Beacon-Library)
代码是关于安卓前台服务Service启动停止绑定解绑操作的示例,有代码解释。
可运行的Android绑定音乐服务的源代码,对于初学者掌握Android项目的开发很有帮助
android 绑定服务客户端,另一个服务端也可以我的资源里。
很多源码都可以绑定 对于新手很有用 因为很多视频里面都是源码事先绑定好了的 所以看起来特别吃力 有了他自己就能很方便的像视频里一样看源码了
android 绑定服务服务端,另一个客户端也可以我的资源里。
android bind life activity fragment 生命周期 绑定
Android 数据绑定验证工具,快速帮你验证表单数据绑定状况
主要演示android的的service如何绑定的完整代码
第4章介绍四大组件的工作过程,包括根Activity的启动过程,Service的启动和绑定过程,广播的注册、发送和接收过程,Content Provider的启动过程。 第5章从源码角度分析上下文Context。 第6章介绍ActivityManager...
Android中采用绑定方式开启服务,可以参考一下
2.1.3 Android应用程序的类型 27 2.2 面向移动设备的开发 28 2.2.1 关于硬件设计的考虑事项 28 2.2.2 考虑用户环境 31 2.2.3 Android开发 32 2.3 To-Do List示例 35 2.4 Android开发工具 40 2.4.1 Android...
Android-nRF-Mesh-Library关于Android-nRF-Mesh-Library允许配置并将消息发送到Bluetooth ... 将应用程序密钥绑定和解除绑定到模型。 设置和清除模型的发布。 设置和删除模型的订阅。 组,包括具有虚拟地址的组。 用于
用于AltBeacon(Android-Beacon-Library)的RxBeacon Rx绑定RxBeacon.with(this).beaconsInRegion().subscribe(new Consumer (){@Override RxBeacon Rx绑定用于AltBeacon(Android-Beacon-Library)...
Xamarin.Android绑定。 该库允许Android应用根据开放且可互操作的与BLE信标进行交互。 利用 从下载二进制文件 参考申请 此存储库中包含一个简单的,以演示测距邻近信标和节省电池的背景测距功能。 Xamarin组件 ...
主要介绍了详解Android的MVVM框架 - 数据绑定,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Android Service服务启动与绑定用法测试,这个android源码演示了如何启动和停止指定的android系统服务,如何Bind Server绑定服务和如何unBind Server解绑服务,并使用NotificationManager来弹出消息处理对话框。
Android绑定Service进行通信
Android-ViewPagerIndicator 一款仿MIUI的ViewPagerIndicator,支持Tab数量随意定义。 效果图 固定tab数量 非固定tab数量 用法 代码生成tab mIndicator.setVisibleTabCount(4);//设置可见Tab数量 mIndicator....
绑定服务调用服务里的方法 bindService 博客地址: http://blog.csdn.net/pangzaifei/article/details/19476863