Android 开发之 bindService() 通信
Service 启动方式有两种
- startService(intent)
- bindService(intent,conn,Context.BIND_AUTO_CREATE)
startService(intent)
生命周期: onCreate()- >onStartCommand()->startService()->onDestroy()
该方法启动service,会执行一个onStartCommand()的方法,所以一些操作可以放在 onStartCommand() 中进行处理。
bindService(intent,conn,Context.BIND_AUTO_CREATE)
生命周期:onCreate()->onBind()->onUnbind()->onDestroy()
绑定启动 service,
使用该方法启动 service 分为几步
1.在 Service 中,重写 onBind() 方法,返回一个 iBinder 对象。
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.d("learnservice", "绑定服务...");
return new MyBinder();
}
2.新建 BinderService 类继承 Service ,在 BindService 类里新建内部类 MyBinder 继承Binder ( Binder 实现 IBinder 接口)。该类中实现一些与 service 通信的方法,比如 setData()方法。
public class MyBinder extends Binder{
public void setData(String data){
MyService.this.data=data;
}
}
3.在 Activity 里,实例化 ServiceConnection 接口的实现类,重写 onServiceConnected() 和 onServiceDisconnected() 方法。
ServiceConnection conn=new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
binder=(MyBinder) service; //该binder,需要在activity中声明。
Log.d("learnservice", "绑定服务conn...");
}
};
4.使用 button 的 onClick() 或者 activity 的 onCreat() 等触发 bindService() 方法
@Override
public void onClick(View v) {
intent = new Intent(MainActivity.this,MyService.class);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
5 }
5.在 activity 中声明 service中的binder
private MyService.MyBinder binder;
6.同时把该 binder 放在 serviceConnection 的 onServiceConnection() 方法中
binder=(MyBinder) service;
这样,就完成了 Activity 和 Service 通过 bindService() 方法绑定并通信。
Android 开发之 bindService() 通信的更多相关文章
- Android开发之bindService()通信
Service启动方式有两种,startService(intent)和bindService(intent,conn,Context.BIND_AUTO_CREATE) startService(i ...
- Android开发之bindService()侦听service内部状态
在Android开发之bindService()通信的基础上,实现bindService()方法侦听service内部状态. 实现侦听service内部状态,使用的是回调机制 1.首先实现一个接口 p ...
- Android开发之旅4:应用程序基础及组件
引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- [置顶] Android开发之MediaPlayerService服务详解(一)
前面一节我们分析了Binder通信相关的两个重要类:ProcessState 和 IPCThreadState.ProcessState负责打开Binder 驱动,每个进程只有一个.而 IPCThre ...
- [置顶] Android开发之serviceManager分析
Android 开发之serviceManager分析 在Android系统中用到最多的通信机制就是Binder,Binder主要由Client.Server.ServiceManager和Binde ...
- Android开发之旅5:应用程序基础及组件
引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
随机推荐
- Java之对象构造过程
先来运行一段代码 class A { public A() { init(); } public void init() { } public static void main(String[] ar ...
- (LeetCode 203)Remove Linked List Elements
Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...
- 怎样增加Dave 英语学习小组
一. 增加小组 英语对IT 是非常重要的,但非常多人都不能坚持去学习,Dave 英语学习小组成立与已经超过半年,如今进行扩招.欢迎想提高英语,而且能够坚持每天学习的人,增加Dave 的小组.并 ...
- 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand7())
给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数. (即,使用函数rand5()来实现函数rand7()). 解答 rand5可以随机生成1,2,3,4,5:rand7可以随机生成1 ...
- OPENCV 常用函数
1.cvCloneImage: IplImage* cvCloneImage( const IplImage* image ); 在使用函数之前,不用特地开辟内存,即该函数会自己开一段内存,然后复制好 ...
- Java从零开始学三十八(JAVA IO- 重定向IO)
一.三个静态变量 java.lang.System提供了三个静态变量 System.in(默认键盘) System.out(默认显示器) System.err 二.重写向方法 System提供了三个重 ...
- 从零开始学JavaScript四(数据类型)
一.分类 基本数据类型:undefined.null.string.Boolean.number 复杂数据类型:object object的属性以无序的名称和值对的形式 (name : value) ...
- 如何更改删除window服务?
Cmd 下输入 sc delete 服务名 想要看服务名直接cmd下输入services.msc 打开服务, 例如删除apache服务 命令:sc delete Apache2.4
- VB调用VC dll的返回方式
第一种类型:数值传递 注意:在VB中,默认变量传递方式为ByRef为地址,而传递值就是用ByVal,还要注意在C++中,int类型的变量是32位的,在VB中要用long型变量来配合.VC++部分: e ...
- 如何自定义oauthauthorizationserverprovider错误信息?
We are using the OAuthAuthorizationServerProvider class to do authorization in our ASP.NET Web Api a ...