AIDL流程整理镊逝,不涉及Binder的通信原理
XMind導出文字
1物臂、client通過bindService連接到remoteService
2旺拉、service在onBind方法中實例化Stub产上,并返回這個實例對象iBinder
3、client通過onServiceConnected的參數(shù)service蛾狗,調(diào)用Stub.asInterface(service)方法晋涣,獲取服務端的代理Proxy
4、client具體調(diào)用方調(diào)用Proxy提供的接口方法沉桌⌒蝗担【注意】Proxy中并沒有真正實現(xiàn)接口,而是將傳參data蒲牧、返回值reply撇贺、方法標識打包赌莺,然后調(diào)用mRemote的transact方法冰抢,從而進入Stub的onTransact方法,這是client進入阻塞狀態(tài)(同步狀態(tài)下)
5艘狭、service的stub實例在onTransact方法中收到Proxy發(fā)送的請求挎扰,根據(jù)方法標識,決定需要執(zhí)行的方法
6巢音、從接收參數(shù)的data中獲取業(yè)務參數(shù)遵倦,執(zhí)行實例對象iBinder中真正的接口業(yè)務方法,將業(yè)務方法執(zhí)行后的結果放入接收參數(shù)的reply中官撼,onTransact方法執(zhí)行完成后梧躺,返回staus,service端進入阻塞狀態(tài)
7傲绣、client激活掠哥,Proxy接收到mRemote返回的狀態(tài)status,獲取reply中的返回值秃诵,將返回值返回給client具體的調(diào)用方续搀。【至此跨進程通信完成】