Android Framework学习之Binder的onewa
2022-12-26 本文已影响0人
一只二凡子
说说一说binder的oneway机制
![](https://img.haomeiwen.com/i1785861/788b40e8674a295e.jpg)
![](https://img.haomeiwen.com/i1785861/6d590469e5fe7fc5.jpg)
oneway binder 发送请求时 只有带_data parclel, 没有_reply parcel
oneway的aidl的接口定义是不能有返回值的
![](https://img.haomeiwen.com/i1785861/66c54fcd751a17b3.jpg)
IPCThreadState里
waitForResponse(NULL,NULL): 带ONEWAY
waitForResponse(reply):不带ONEWAY
![](https://img.haomeiwen.com/i1785861/7cfc55d3d7e9a547.jpg)
![](https://img.haomeiwen.com/i1785861/ae13396c32642adf.jpg)
![](https://img.haomeiwen.com/i1785861/ad7979e97ec3d998.jpg)
对于ONEWAY接口,所有调用在server端都被串行化(尽管不同应用发起请求是并行的)
![](https://img.haomeiwen.com/i1785861/084a128303afe733.jpg)
![](https://img.haomeiwen.com/i1785861/8bcd0cbf83d41a8b.jpg)
![](https://img.haomeiwen.com/i1785861/d30e10ac0dd69dea.jpg)
server端的binder线程
![](https://img.haomeiwen.com/i1785861/769145e7ac801509.jpg)
![](https://img.haomeiwen.com/i1785861/9fa9604478911b7f.jpg)
![](https://img.haomeiwen.com/i1785861/a1c84cd3eff2ada4.jpg)
![](https://img.haomeiwen.com/i1785861/e37f84f7982449fa.jpg)
![](https://img.haomeiwen.com/i1785861/9cc4b09d6c70fad2.jpg)
![](https://img.haomeiwen.com/i1785861/e2abc03c8d5d5f47.jpg)
onesay主要用于系统服务向应用端发起binder调用
scheduleLaunchingActivity: 系统服务向应用端发起oneway binder调用,让应用端启动acitvitiy
IWindow:WMS向应用端发起oneway binder调用
IServiceConnection: 应用端bindService完成时,AMS向应用端发起的oneway binder调用
IIntentReceiver:AMS发起oneway binder调用 分发广播
oneway binder 优点
1,异步:应用端处理这些oneway binder调用,如果很耗时,也不会阻塞系统服务
2,串行化,系统会逐个分发binder 调用
说一说binder的oneway机制
1. oneway是异步binder调用,client发起oneway binder调用后,无需挂起线程等待返回结果
2. server端串行化处理
3. oneway的实现机制是怎样的?