github地址:https://github.com/BraveFaith/BinderTest
1.如果Activity 和 Service 是相同進(jìn)程,那么bind服務(wù)的時候,ServiceConnection的onServiceConnected方法返回的IBinder實(shí)際是Service內(nèi)部實(shí)現(xiàn)的Stub對象,所以在調(diào)用Stub.asInterface(android.os.IBinder obj)方法的時候會調(diào)用Binder 的queryLocalInterface方法,這個方法會返回mOwner對象,而mOwner則是Service 實(shí)現(xiàn)的Stub對象,所以Activity最終拿到的是Service中實(shí)現(xiàn)的Stub對象.
2.如果Activity 和 Service 不在同一個進(jìn)程時,那么bind服務(wù)的時候,ServiceConnection的onServiceConnected方法返回的IBinder實(shí)際是BinderProxy,所以在調(diào)用Stub.asInterface(android.os.IBinder obj)方法的時候會調(diào)用BinderProxy 的queryLocalInterface方法,這個方法默認(rèn)就是返回null,所以Stub.asInterface(android.os.IBinder obj)方法會返回Proxy對象,所以Activity最終拿到的是Proxy對象