1. 程式人生 > >系列筆記17、代理模式-ActivityManagerProxy、Binder

系列筆記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/