http://liuwangshu.cn/application/classloader/2-android-classloader.html(刘望舒)

https://juejin.cn/post/6844904006507200519

https://cloud.tencent.com/developer/article/1199009

http://liuwangshu.cn/application/classloader/2-android-classloader.html(作者:刘望舒)

android类加载器与java类加器的区别

1.java类加载器加载的文件是class,android类加载器加载的是dex。

2.子类加载器不一定就继承父类加载器

3.java的BootClassLoader是用c++实现,android的BootClassLoader是用Java实现。

android类加载与java类加载的相同点

1.都遵循双亲委托机制

android类加载器的类型

Android中的ClassLoader类型和Java中的ClassLoader类型类似,也分为两种类型,分别是系统ClassLoader和自定义ClassLoader。其中系统ClassLoader主要有3种分别是BootClassLoader、PathClassLoader和DexClassLoader。

PathClassLoader和DexClassLoader,都是对BaseDexClassLoader的一层简单的封装,所以只要研究BaseDexClassLoader类即可。

1)BootClassLoader

创建时机: Zygote进程的入口方法中创建的

2)PathClassLoader

在Zygote进程创建SystemServer进程时创建的

运行一个Android程序需要用到几种类型的类加载器

ClassLoader classLoader = getClass().getClassLoader();
        while (classLoader != null){
            Log.d("TAG", "onCreate: " + classLoader);
            classLoader = classLoader.getParent();
        }

打印日志:

dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.szlanyou.classloaderdemo-cCHAoEdnNvzVncxFHe8K_w==/base.apk"],
nativeLibraryDirectories=[/data/app/com.szlanyou.classloaderdemo-cCHAoEdnNvzVncxFHe8K_w==/lib/arm64, /system/lib64, /hw_product/lib64, /system/product/lib64, /prets/lib64]]]

java.lang.BootClassLoader@fc6ebe4


0 条评论

发表回复

您的电子邮箱地址不会被公开。