美文网首页
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