在java环境中,有个概念叫做“类装载器”,其作用是动态装载Class文件。标准的java SDK中有一个ClassLoader类,借助它可以装载

想要的Class文件,每个Classoader对象在初始化时必须指定Class文件的路径。

使用类加载器的原应:

import中所引用的类文件有两个特点:

必须存在于本地 当程序运行是需要该类时,内部类装载器会自动装载该类,这对程序员来讲是透明的 即程序原不知道该过程

编译时必须在现场,负责编译过程会因为找不到引用文件而不能正常编译。

但在有些情况下,所需要的类却不能满做以上两个条件 比如要执行的程序在服务器端,另一种情况是 要引用的Class文件不方便在编译时

直接参与,而只能在运行时动态调用。

这就是使用ClassLoader的原因。

一般情况下,应用程序不许要创建一个全新的ClassLoader对象,而是使用当前环境已经存在的ClassLoader。因为java的Runtime

环境在初始化时,其内部会创建一个Classoader对象用于加载Runtime所需的各种java类

每个ClassLoader必须要有一个父ClassLoader在庄子啊Class文件时,子ClassLoader会先请求其父ClassLoader加载该Class

只有当其父ClassLoader找不到该Class文件时,子ClassLoader才会继续装载该类,这是一种安全机制。

对于android的应用程序 本质上虽然是java开发,并且使用标准的java编译器编译出Class文件 但最终的APK文件中包含的确实dex

类型的文件 dex文件是将所需的所有class文件重新到包,打包的规则不是简单的压缩,而是完全对class文件内部的各种函数表

变量表进行优化,并产生一个新的文件 这就是dex文件 由于dex文件是一种经过优化的Class文件因此要加载这样特殊的Class文件就余姚特殊的

类装载器,这就是DexClassLKoader Android SDK 中提供类DexClassLoader 类就是出于这个目的

类装载器DexClassLoader (android内核剖析)的更多相关文章

  1. Android内核剖析(1)

    Linux的启动过程 开机上电执行bootloader,将内核的前n条指令加载到系统内存中------>系统内核的初始化----------->启动应用程序. bootloader的位置装 ...

  2. 《Android内核剖析》读书笔记 第13章 View工作原理【View树遍历】

    View状态分类 在View视图中定义了多种和界面效果相关的状态,比如拥有焦点Focused.按下Pressed等,不同的状态一般会显示不同的界面效果,而且视图状态会随着用户的操作而改变,一般通过xm ...

  3. 《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】

    计算视图大小的过程(Measure) 视图大小,准确的来说应该是指视图的布局大小:我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置 ...

  4. Android内核剖析读书笔记(1)—Framework概述

    一.Framework组成 1.服务端组成 a.WindowManagerService     决定各窗口的叠放次序.隐藏或者显示窗口 b.ActivityManagerService   管理应用 ...

  5. Android内核剖析读书笔记

    第16章 程序包管理 PackageManagerService類 PmS 目錄 16.1 包管理概述 16.2 packages.xml文件格式 16.3 包管理服務的啟動過程 16.4 應用程序的 ...

  6. Android类装载器DexClassLoader的简单使用-----制作android插件的前奏

    声明:此篇文章借鉴<android内核剖析>整理得来. 一.装载器简介 “类装载器”(ClassLoader),顾名思义,就是用来动态装载class文件的.标准的Java SDK中有个Cl ...

  7. 《深入理解Android内核设计思想》

    <深入理解Android内核设计思想> 基本信息 作者: 林学森 出版社:人民邮电出版社 ISBN:9787115348418 上架时间:2014-4-25 出版日期:2014 年5月 开 ...

  8. Android内核驱动程序的编写和编译过程

    注意:涉及的代码为android内核代码而不是android源码. 在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非ip ...

  9. Android内核sysfs中switch类使用实例

    Android内核sysfs中switch类使用实例 最终在这个周末,能够干点自己想要干的事了. 由我这个二流的内核驱动开发人员来解析一下sysfs中的switch类.先猜測一下来历,在普通的嵌入式L ...

随机推荐

  1. spark学习笔记01

    spark学习笔记01 1.课程目标 1.熟悉spark相关概念 2.搭建一个spark集群 3.编写简单spark应用程序 2.spark概述 spark是什么 是基于内存的分布式计算引擎,计算速度 ...

  2. 剑指架构师系列-Redis安装与使用

    1.安装Redis 我们在VMware中安装CentOS 64位系统后,在用户目录下下载安装Redis. 下载redis目前最稳定版本也是功能最完善,集群支持最好并加入了sentinel(哨兵-高可用 ...

  3. C语言多维数组的指针传递

    在C语言中为了节省空间,提高运行速度经常使用指针来完成数组的传递. 对于一维数组而言可以直接传递首地址 而对于二维数组必须在传递时声明是二维数组的指针,并且调用时也要经过一些运算 首先是定义形参: 函 ...

  4. 网络编程练习这些就ok

    1,什么是C/S架构? C指的是client(客户端软件),S指的是Server(服务端软件) 一个C/S架构就是,实现服务端软件与客户端软件基于网络通信. 互联网中处处是C/S架构     如123 ...

  5. [Java笔记]继承

    继承只是继承框架,而数据没有继承!. 继承不改变父类数据!

  6. Kirill And The Game CodeForces - 842A

    CodeForces - 842A 需要将除法改换成乘法进行计算 #include<bits/stdc++.h> using namespace std; int main() { lon ...

  7. Node.js 多进程

    我们都知道 Node.js 是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能. 每个子进程总是带有三个流对象:child.st ...

  8. MySQL CURTIME() 函数

    定义和用法 CURTIME() 返回当前的时间. 语法 CURTIME() 实例 下面是 SELECT 语句: SELECT NOW(),CURDATE(),CURTIME() 结果如下所示: NOW ...

  9. opencv之人脸识别

    最近在做一个类似于智能广告投放的项目,简单思路是利用opencv获取摄像头图像,然后调用接口或利用其他一些离线模型进行人脸属性识别,进而投放广告.本篇先简单介绍利用opecv进行人脸识别. # -*- ...

  10. MySQL系列教程(二)

    mySQL执行计划 语法  explain <sql语句> 例如: explain select * from t3 where id=3952602; explain输出解释 +---- ...