欢迎使用CSDN-markdown编辑器

来源:互联网 发布:战地1枪械数据 编辑:程序博客网 时间:2024/06/14 07:08

首先是对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接口,然后获取代理来完成。

原创粉丝点击