系列筆記17、代理模式-ActivityManagerProxy、Binder
Android原始碼裡的ActivityManagerProxy是代理模式的實現。
package android.app;
public abstract class ActivityManagerNative extends Binder implements IActivityManager
{
class ActivityManagerProxy implements IActivityManager
{
...
}
}
ActivityManagerProxy相當於代理部分,實現了IActivityManager介面,該介面定義了一些Activity相關的介面方法。
package android.app;
public interface IActivityManager extends IInterface {
public int startActivity(IApplicationThread caller, String callingPackage, Intent intent,
String resolvedType, IBinder resultTo, String resultWho, int requestCode, int flags,
ProfilerInfo profilerInfo, Bundle options) throws RemoteException;
public Intent registerReceiver(IApplicationThread caller, String callerPackage,
IIntentReceiver receiver, IntentFilter filter,
String requiredPermission, int userId) throws RemoteException;
public ComponentName startService(IApplicationThread caller, Intent service,
String resolvedType, String callingPackage, int userId) throws RemoteException;
...
}
IActivityManager介面相當於代理模式中的抽象主題,而真正實現主題的,則是繼承自ActivityManagerNative的AMS。
public final class ActivityManagerService extends ActivityManagerNative
implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback {
...
}
AMS屬於系統級的Service並且運行於獨立的程序空間中,可以通過ServiceManager來獲取它,而ActivityManagerProxy也運行於自己所處的程序空間中,AMS與ActivityManagerProxy屬於跨程序通訊,實現是基於Android的Binder機制。ActivityManager是管理與維護Activity相關資訊的類,其大多數邏輯實質上是由ActivityManagerProxy承擔。
Android中的Binder機制與AIDL
傳統的跨程序通訊方式有:Socket、訊號量、管道、記憶體共享、訊息佇列等
Binder所涉及的4個主要模組:Binder Client、Binder Server、ServerManager和Binder Driver。
Binder Client相當於客戶端,Binder Server相當於伺服器, ServerManager相當於DNS伺服器,Binder Driver 相當於一個路由器。
參考文章
http://blog.csdn.net/luoshengyang/article/details/6618363/