欢迎使用CSDN-markdown编辑器

首先是对AMS持有的对象代理

C:客户端App所在进程
S: AMS服务所在进程

IActivityManager 接口

public abstract class ActivityManagerNative {

static public IActivityManager asInterface(IBinder obj) {
    return IActivityManager.Stub.asInterface(obj);
}
static public IActivityManager getDefault() {
    return ActivityManager.getService();
}

所以跟进ActivityManager.getService()

public static IActivityManager getService() {
    return IActivityManagerSingleton.get();
    }

  private static final Singleton<IActivityManager> IActivityManagerSingleton =
            new Singleton<IActivityManager>() {
                @Override
                protected IActivityManager create() {
                    final IBinder b = ServiceManager.getService(Context.ACTIVITY_SERVICE);
                    final IActivityManager am = IActivityManager.Stub.asInterface(b);
                    return am;
                }
            };

这是一个单例模式,首先获取远程服务的Binder接口,然后经典的asInterface转成定义的接口即可。获取远程服务都是从ServiceManager管家类获取

思考:app本身的进程如果获取远程服务AMS,是先拿到相应的Binder接口,然后获取代理来完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值