zoukankan      html  css  js  c++  java
  • Android ClassLoader笔记(二)

    二、Android ClassLoader

    Android ClassLoader加载的是dex文件,而不是jar或class文件。

    2种类型:系统和自定义
    系统加载器有:BootClassLoader(BCL)、PathClassLoader(PCL)、DexClassLoader(DCL)

    1、BCL:java实现的,是CL的内部类。Android系统启动时会使用该类来预加载常用类。它是一个单例类,访问修饰符是默认的,只有在同一个包才可以使用,因此在我们的应用是无法直接调用的。

    2、PCL:Android系统使用PCL来加载系统类和应用程序的类,加载的都是dex文件(或者是包含dex的apk文件或jar文件)。继承于BaseDexClassLoader。

    3、DCL:可以加载dex文件(或者是包含dex的apk文件或jar文件),也可以从SD卡进行加载,这意味着它可以在应用未安装的情况下加载dex相关文件。它是热修复和插件化的基础。继承于BaseDexClassLoader。它的构造函数参数optimizedDirectory代表什么呢?我们知道应用程序在第一次加载时,Android系统会对dex优化成odex,这样以后再次启动这个程序就直接加载odex,提高了启动速度和执行效率。而这个参数就是代表odex的存储路径,需要注意的是该路径必须是一个内部存储路径。

    运行Android程序需要几种类加载器:(1)PCL(2)BCL
    继承关系:
    BootClassLoader、BaseDexClassLoader、SecureClassLoader继承于CL;URLClassLoader继承于SecureClassLoader;PathClassLoader和DexClassLoader继承于BaseDexClassLoader。

    BCL是在Zygote进程的入口方法创建的,PCL是在Zygote进程创建SystemServer进程时创建的。

    参考:
    http://liuwangshu.cn/application/classloader/2-android-classloader.html

  • 相关阅读:
    git commit 合并
    git 管理 Linux 文件系统
    python 全局变量的使用
    JavaScript 中 类型转换
    canconfig 配置命令
    python 调用 shell 命令
    python 3 操作mysql数据库的方法
    python 字符串和整数,浮点型互相转换
    JavaScript 里面的整数 位 操作
    JavaScript 使用 php 的变量
  • 原文地址:https://www.cnblogs.com/hacjy/p/8136099.html
Copyright © 2011-2022 走看看