1. Native层Binder
Service.cpp 服务端程序
main()
sm = defaultServiceManager() //获取service manager引用
sm->addService(String16("service.myservice),new BnMyService()) //注册名为""的服务到service manager
startThreadPool() // 启动线程池
jionThreaPool() //把主线程加入到线程池
ClientDemo.cpp 客户端程序
sm = defaultServiceManager() //获取service manager引用
binder = sm->getService(String16("service.myservice")) //获取名为""的binder接口
cs = interface_cast<IMService>(binder) //将binder对象转换为强引用类型的IMyService
cs->sayHello() //利用binder引用调用远程sayHello()
IMyService.h 自定义的MyService服务
DECLARE_META_INTERFACE(MyService) //使用宏,申明MyService
virtual void sayHello() = 0 //定义方法
//定义命令字段
//申明客户端BpMyService
//申明服务端BnMyService
IMyService.cpp 自定义的MyService
IMPLEMENT_META_INTERFACE(MyService,"android.demo.IMyService")//使用宏,完成MyService定义
void BpMyService::sayHello(){} //实现客户端sayHello方法
remote()->transact(HELLO,data,&reply)
status_t BnMyService::onTransact(){} //服务端,接收远程消息,处理onTransact方法
case HELLO:{}//收到hello指令处理流程
void BnMyService::sayHello(){}实现服务器sayHello方法
2. Framework层Binder
Server端
ServerDemo.java:可执行程序
main()
Looper.prepare0//准备Looper循环执行
setThreadProth //设置为前台优先级
addService("Myservice",new MyService()) //注册服务
IMyService.java:定义IMService接口
DESCRIPTOR="com.lyx.frame.frameworkBinder.MyServer" //
void sayHello() //定义sayHello()
MyService.java:定义MyService
IMyServier asInterface() //将MyDerver转换为IMyServicer
重写onTransacdt() //服务端,接收远程消息,处理onTransact方法
重写sayHello() //自定义sayHello()
Client端
ClientDemo.java:可执行程序
main()
binder=ServiceManager.getService("MyService") //获取名为""的服务
myService=new MyServiceProxy(binder) //创建MyServiceProxy对象
myService.sayHello("binder")//通过MyServiceProxy对象调用接口的方法
IMService:和server端完全一致
MyServiceProxy.java:定义MyServiceProxy
private IBinder mRemote//代表BpBinder
重写sayHello() //自定义sayHello方法
重写asBinder()
return mRoete