正在研究Android中的Binder機制,我想問的是在呼叫遠程服務時,Service中onBind()回傳的Binder型別物件,是在什么時候變成onServiceConnected()中的BinderProxy型別的物件呢?
看了《Android開發藝術探索》,在系結服務的程序中,ActivityThread的handleBindService方法回呼了Service的onBind()方法,并把onBind回傳的IBinder型別物件(此時型別為Binder)交給了AMS的publishService方法,幾經輾轉后回呼了Activity中ServiceConnection的onServiceConnected方法,并傳入了這個上邊說的那個IBinder物件,但是這個時候它的型別已經變成了BinderProxy型別了。
我覺得這個BinderProxy應該是Client向SM查詢后得到的,但是這個程序具體發生在哪里呢?
uj5u.com熱心網友回復:
大神在哪里,
uj5u.com熱心網友回復:
這個問題問得很好啊,如果是跨行程系結service的話在onServiceConnection中獲得確實bindProxy型別的物件,在同行程的時候獲得的是Binder型別的,我也想知道是為什么?uj5u.com熱心網友回復:
居然沒有一個大神能夠回答這個問題,我研究好幾天了,發現回傳的IBinder直接呼叫了ServiceRecord.onBind,即直接回傳了Service的onBind方法回傳值,在AIDL跨行程通信中,就是一個IXXX.Stub,跟蹤后面的publishService流程,并沒有發現將它轉換成BinderProxy?無語的很,居然沒有一篇文章講解這個問題轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/12316.html
標籤:Android
