安卓高手之路之ClassLoader(三)
来源:互联网 发布:mac最好的视频播放器 编辑:程序博客网 时间:2024/06/06 08:30
由于看C++和C代码看得很累,很辛苦。上一章终于解脱到java代码中来了。 第一个getClassLoader发生在main的preload方法中,
public static void main(String argv[]) {
preload();
}
static void preload() { preloadClasses(); preloadResources(); }
private static void preloadClasses() { final VMRuntime runtime = VMRuntime.getRuntime(); InputStream is = ZygoteInit.class.getClassLoader().getResourceAsStream( PRELOADED_CLASSES);
可以看到,直接调用了getClassLoader()这个classLoader是个什么东西呢。
public ClassLoader getClassLoader() { if (this.isPrimitive()) { return null; } ClassLoader loader = getClassLoaderImpl(); if (loader == null) { loader = BootClassLoader.getInstance(); } return loader; }
由于这个类是没有classloader的,因此调用的是BootClassLoader.getInstance().
/** * Provides an explicit representation of the boot class loader. It sits at the * head of the class loader chain and delegates requests to the VM's internal * class loading mechanism. */class BootClassLoader extends ClassLoader {
现在明白了吧。BootClassLoader原来就是第一个class的ClassLoader。对于Zygote是com.android.internal.os.ZygoteInit,对于其他的,那就是com.android.internal.os.RuntimeInit 的classloader。也就是init.rc中指定的BOOTCLASSPATH指定的classLoader。
现在看另外一个方法也就是RuntimeInit 的加载
const char* envStr = getenv("CLASSPATH"); if (envStr != NULL) { gDvm.classPathStr = strdup(envStr); } else { gDvm.classPathStr = strdup("."); }
handleChildProc
else { cloader = ClassLoader.getSystemClassLoader(); } try { ZygoteInit.invokeStaticMain(cloader, className, mainArgs);
ClassLoader.getSystemClassLoader();这个classLoader与普通的classLoader又有不同。这个是一个PathClassLoader 这个以BootClassLoader作为父Loader。这很明显是一个装饰者模式。
阅读全文
0 0
- 安卓高手之路之ClassLoader(三)
- 安卓高手之路之 ClassLoader
- 安卓高手之路之ClassLoader(二)
- 安卓高手之路之ClassLoader(四)
- 安卓高手之路之ClassLoader(总结篇)
- [置顶] 安卓高手之路之ClassLoader(二)
- 安卓高手之路之PackageManagerservice
- 安卓高手之路之 GDI图形引擎篇
- 安卓高手之路之 应用篇
- 安卓高手之路之(架构设计)
- 安卓高手之路之PackageManagerservice(二)
- 安卓高手之路之java层Binder
- [置顶] 安卓高手之路之 WindowManager
- 安卓高手之路之 图形系统之 图形框架(1)
- 安卓之路问题三
- PHP 高手之路(三)
- JVM 菜鸟进阶高手之路三
- 安卓高手之路之图形系统(6)requestLayout的流程
- 安卓高手之路之 ClassLoader
- 斐波拉契数列的三种解法
- POJ1001
- 安卓高手之路之ClassLoader(二)
- 字符串指针及句子逆序
- 安卓高手之路之ClassLoader(三)
- FTRL 算法
- 利用射线进行碰撞检测做射击效果
- 安卓高手之路之ClassLoader(四)
- 视觉里程计 特征点法
- OpenCV的鼠标操作——用鼠标画矩形(代码解读)
- 安卓高手之路之ClassLoader(总结篇)
- 向HDFS输出文件
- java.net.SocketException四大异常解决方案