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 条评论