系列笔记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/














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值