每个Service返回给Client的引用就是frameWork层中的Handler.
所以serivcemanager的handler是0.
Client通过servicemanager获得的service引用是service的代理的引用,Client通过调用代理的方法最终掉用真正service方法。
整个调用过程是同步的,service没有返回的时候,client是一直阻塞的。
IBinder 结构
public interface IBinder { int DUMP_TRANSACTION = 1598311760; int FIRST_CALL_TRANSACTION = 1; int FLAG_ONEWAY = 1; int INTERFACE_TRANSACTION = 1598968902; int LAST_CALL_TRANSACTION = 16777215; int LIKE_TRANSACTION = 1598835019; int PING_TRANSACTION = 1599098439; int TWEET_TRANSACTION = 1599362900; String getInterfaceDescriptor() throws RemoteException; boolean pingBinder(); boolean isBinderAlive(); IInterface queryLocalInterface(String var1); void dump(FileDescriptor var1, String[] var2) throws RemoteException; void dumpAsync(FileDescriptor var1, String[] var2) throws RemoteException; boolean transact(int var1, Parcel var2, Parcel var3, int var4) throws RemoteException; void linkToDeath(IBinder.DeathRecipient var1, int var2) throws RemoteException; boolean unlinkToDeath(IBinder.DeathRecipient var1, int var2); public interface DeathRecipient { void binderDied(); } }
IInterface 结构
#include <binder/IInterface.h> namespace android { // --------------------------------------------------------------------------- IInterface::IInterface() : RefBase() { } IInterface::~IInterface() { } sp<IBinder> IInterface::asBinder() { return this ? onAsBinder() : NULL; } sp<const IBinder> IInterface::asBinder() const { return this ? const_cast<IInterface*>(this)->onAsBinder() : NULL; } // --------------------------------------------------------------------------- }; // namespace android