美文网首页
Android ClassLoader源码

Android ClassLoader源码

作者: 咚咚_Coding | 来源:发表于2021-06-07 23:43 被阅读0次
    hint:源码基于android8.0 sdk版本:26
    image.png

    ClassLoader#loadClass(java.lang.String)

    protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
            // First, check if the class has already been loaded
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                try {
                    if (parent != null) {
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }
    
                if (c == null) {
                    // If still not found, then invoke findClass in order
                    // to find the class.
                    c = findClass(name);
                }
            }
            return c;
    }
    

    子类BaseDexClassLoader

    private final DexPathList pathList;
    findClass
    image.png

    DexPathList

    private Element[] dexElements; 构造初始化
    Element
    image.png

    DexPathList--makeDexElements

    image.png

    DexPathList--findClass

    image.png
    Element--findClass
    image.png
    DexPathList--loadDexFile
    image.png

    DexFile

    image.png
    DexFile--loadDex
    image.png
    DexFile--loadClassBinaryName、defineClass、defineClassNative
    image.png

    Android8.0+主角--PathClassLoader

    image.png

    相关文章

      网友评论

          本文标题:Android ClassLoader源码

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