如何使用Binder

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	




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值