美文网首页
Application层的 PackageManager

Application层的 PackageManager

作者: Wi1ls努力努力再努力 | 来源:发表于2019-02-25 18:13 被阅读0次

获取 PackageManager

PackageManager pm=context.getPackageManager();

像 Activity 这种的的context的实现类的 ContextImpl

public PackageManager getPackageManager(){
  if(mPackageManager !=null){
    return mPackageManager;
  }
  
  IPackageManager pm = ActivityThread.getPackageManager();
  if(pm != null){
    return (mPackageManager = new ApplicationPackageManager(this, pm));
  }
  return null;
}

ActivityThread.java

public static IPackageManager getPackageManager(){
  if(sPackageManager != null){
    return sPackageManager;
  }
  IBinder b = ServiceManager.getService("package");
  sPackageManager = IPackageManager.Stub.asInterface(b);
  return sPackageManager;
}

综上可以得知,PackageManager也是采用的 IBinder 进行通信,客户端保存了一个远程 BinderProxy,并且利用 ApplicationPackageManager(extends PackageManager )进行了封装,提供给用户使用,Application 层底层的通信还是通过其ApplicationPackageManager 保存的 BinderProxy 进行通信的。所有的逻辑都会转给 系统进程的PackageManagerService 处理。

相关文章

网友评论

      本文标题:Application层的 PackageManager

      本文链接:https://www.haomeiwen.com/subject/kingyqtx.html