首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android加载之双亲委派机制

加载成功则返回,要是BootClassLoader加载失败了,就会将加载任务向下交还给PathClassLoader进行加载; 5....保证系统类.class文件不能被篡改,通过双亲委派机制可以保证系统类的加载逻辑不会被篡改。...Android中使用的类加载器主要包括PathClassLoader和DexClassLoader两个,这两个加载器在Android8以后已经完全一样了,他们都是继承自BaseClassLoader。...Android中进行类加载的时候,最终会首先将所有的.class文件按照dex文件加载到dexElements数组中,这里的dex文件可以理解为一个文件夹,每个dex文件中包含多个.class文件,关于...基于这一点可以实现Android代码热修复,我们可以将需要修复的class文件整体打包成一个dex文件,并放置到dexElements数组的最前面,这样就实现了类的替换加载的功能。

1.6K20

Android 面试必备 - JVM 及 类加载机制

现行的垃圾回收器采用分代的方式来采用不用的回收设计,分代的基本思路是根据对象生存时间的长短,把堆内存分成3个代: Young(年轻代):由1个Eden区和2个Survior构成,绝大多数对象先分配到Eden区中,当垃圾回收机制来临的时候...---- 双亲委托机制 双亲委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。...应用程序类加载器:负责加载用户路径上所指定的类库,开发者可以直接使用这个类加载器,也是默认的类加载器。 三种加载器的关系:启动类加载器->扩展类加载器->应用程序类加载器->自定义类加载器。...双亲委派模型的工作过程:如果一个类加载器接收到了类加载的请求,它首先把这个请求委托给他的父类加载器去完成,每个层次的类加载器都是如此,因此所有的加载请求都应该传送到顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求...实现:在java.lang.ClassLoader的loadClass()方法中,先检查是否已经被加载过,若没有加载则调用父类加载器的loadClass()方法,若父加载器为空则默认使用启动类加载器作为父加载

76610
您找到你想要的搜索结果了吗?
是的
没有找到

Android 逆向】类加载器 ClassLoader ( 加载 Android 组件的类加载器 | 双亲委派机制实例分析 )

文章目录 一、加载 Android 组件的类加载器 二、加载 Android 组件的类的双亲委派机制实例 一、加载 Android 组件的类加载器 ---- 打印 Activity 组件类 的 类加载器...; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity...Android 组件的类的双亲委派机制实例 ---- Activity 类加载分析 : Activity 组件类的类加载器是 dalvik.system.PathClassLoader , dalvik.system.PathClassLoader...类加载器的 父类节点是 java.lang.BootClassLoader 类加载器 , java.lang.BootClassLoader 是根节点的 类加载器 ; 双亲委派机制 : 在双亲委派机制中...尝试加载 Activity 类 , 加载成功 , 返回该类 ;

28130

Android 插件化原理解析——插件加载机制

ClassLoader机制 或许有的童鞋还不太了解Java的ClassLoader机制,我这里简要介绍一下。...Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校检、转换解析和初始化的,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。...思路分析 Android系统使用了ClassLoader机制来进行Activity等组件的加载;apk被安装之后,APK文件的代码以及资源会被系统存放在固定的目录(比如/data/app/package_name...ClassLoader加载的;由类加载机制的『双亲委派』特性,只要有一个应用程序类由某一个ClassLoader加载,那么它引用到的别的类除非父加载器能加载,否则都是由这同一个加载加载的(不遵循双亲委派模型的除外...这里我先卖个关子~ OK,本文的内容就到这里了;关于『插件机制对于Activity的处理方式』也就此完结。要说明的是,在本文的『保守方案』其实只处理了代码的加载过程,它并不能加载有资源的apk!

1.6K10

Android 热修复】热修复原理 ( 类加载机制 | PathClassLoader 加载 Dex 机制 | PathDexList 查找 Class 机制 | 类查找的顺序机制 )

文章目录 一、 PathClassLoader 加载 Dex 机制 二、 PathDexList 查找 Class 机制 三、 类查找的顺序机制 一、 PathClassLoader 加载 Dex 机制...---- Android 中 Class 加载机制 : Java 代码运行时 , 使用 ClassLoader 加载 Class 字节码文件 , Class 字节码文件 , Jar 文件 , Dex...文件 , 都必须加载到内存中 ; 在 Android 平台中 , Android 应用运行时 , 使用 PathClassLoader 加载 Dex 文件 , 在应用启动时 , 首先将若干 Dex 文件加载到内存中...; 一个 Android 应用中可以存在多个 Dex 文件 , 参考 【Android 安全】DEX 加密 ( 多 DEX 加载 | 65535 方法数限制和 MultiDex 配置 | PathClassLoader...类加载源码分析 | DexPathList ) 博客 , 二、 PathDexList 查找 Class 机制 ---- 当应用运行时调用到某类 A.class 时 , 会通过 PathClassLoader

1.1K20

加载机制

加载机制 Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。...加载加载”(Loading)阶段是整个“类加载”(Class Loading)过程中的一个阶段,不要混淆这两个看起来很相似的名词。...相对于类加载过程的其他阶段,非数组类型的加载阶段(准确地说,是加载阶段中获取类的二进制字节流的动作)是开发人员可控性最强的阶段。...加载阶段既可以使用Java虚拟机里内置的类加载器来完成,也可以由用户自定义的类加载器去完成,开发人员通过定义自己的类加载器去控制字节流的获取方式(重写一个类加载器的findClass()或loadClass...验证阶段对于虚拟机的类加载机制来说,是一个非常重要的、但却不是必须要执行的阶段,因为验证阶段只有通过或者不通过的差别,只要通过了验证,其后就对程序运行期没有任何影响了。

62520

加载机制

点击上方“晏霖”,选择“置顶或者星标” 曾经有人关注了我 后来他有了女朋友 1.6类加载机制 1.6.1概述 学习本章前我们要对类文件结构有一个简单的认识,而学习类文件结构没有任何难度,更多的是参考《...n 验证 验证是连接的第一步,这个阶段主要是校验class文件的字节流包是否符合《Java虚拟机规范》所规定的,是虚拟机自身保护的机制。...我们从图中可以看出,双亲委派模型的工作原理:一个类收到了加载请求时,自己不做加载操作,而是把请求转交给父类加载器执行加载任务,所有请求最终都会到启动类加载器中,只有父类加载加载失败时会向下交给子类加载器自己完成加载任务...代码清单1-2 类加载机制源码 //ValueUtility.java static { SharedSecrets.setJavaCorbaAccess(new JavaCorbaAccess...加载过程:在平台类加载器及应用程序类加载器收到加载请求时,在委派给父类加载器之前,会先判断该类能否归属到一个系统模块中,如果能,就需要优先委派给负责那个模块的加载器完成加载。 ?

39420

加载机制

加载具体机制可以参考: Java类加载机制: https://zhuanlan.zhihu.com/p/25228545 JVM 基础 - Java 类加载机制: https://www.pdai.tech.../md/java/jvm/java-jvm-classload.html 2 类加载机制 2.1 双亲委派机制 双亲委派机制是指如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成...2.2 全盘负责机制 当一个类加载器负责加载某个 Class 时,该 Class 所依赖的和引用的其他 Class 也将由该类加载器负责载入,除非显式使用另外一个类加载器来载入。...2.3 缓存机制 缓存机制将会保证所有加载过的 Class 都会被缓存,当程序中需要使用某个 Class 时, 类加载器先从缓存区寻找该 Class, 只有缓存区不存在,系统才会读取该类对应的二进制数据...结合类加载机制中的全盘负责机制,我们知道这个匿名类是由加载依赖它的 org.apache.iotdb.MySum 的类加载器来加载的,我们把这个类加载器记为 A。

47910

加载机制

加载机制 类的加载过程总的来说分为7个过程:加载,验证,准备,解析,初始化,使用,卸载,其中类的验证,准备,解析又称为连接阶段 java虚拟机规范并没有规定什么时候要进行加载阶段,但是规定了什么时候必须进行初始化阶段...从开发人员的角度类加载器有三种:启动类的加载器,扩展加载器,应用程序类加载器 启动类加载器:负责将存放在<JAVA_HOME>\lib目录中的类库加载到虚拟机内存中 扩展加载器:负责将存放在<JAVA_HOME...>\lib\ext目录中的类库加载到虚拟机内存中 应用程序类加载器:它负责加载用户类路径(ClassPath)上所指定的类库 双亲委派机制加载器之间如下图的这种层次关系,称为类加载器的双亲委派模型。...双亲委派模型的工作过程:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到顶层的启动类加载器中...,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去加载

39120

Android应用setContentView与LayoutInflater加载解析机制源码分析

前面分析《Android触摸屏事件派发机制详解与源码分析三(Activity篇)》时提到了一些关于布局嵌套的问题,当时没有深入解释。...2-2 关于窗口Window类的一些关系 在开始分析Activity组合对象Window的setContentView方法之前请先明确如下关系(前面分析《Android触摸屏事件派发机制详解与源码分析三...记得前面有一篇文章《Android异步消息处理机制详解及源码分析》的3-1-2小节说过,一个Activity的开始实际是ActivityThread的main方法(至于为什么后面会写文章分析,这里站在应用层角度先有这个概念就行...【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果】 3 Android5.1.1(API 22)看看LayoutInflater机制原理 上面在分析...一个轻量级的页面,我们通常使用它来做预加载处理,来改善页面加载速度和提高流畅性,ViewStub本身不会占用层级,它最终会被它指定的层级取代。

39520

Android 3.0引入的异步加载机制Loader

Loader是谷歌在Android 3.0引入的异步加载机制,能够对数据异步加载并显示到Activity或Fragment上,使用者不需要对数据的生命周期进行管理,而是交给Loader机制来管理。...使用Loader无需关心线程和Handler的创建和销毁,也无需自己管理数据整个的生命周期,Loader机制会自动帮我们处理好。我们唯一要处理的就是数据本身。...Fragmeng中使用getSupportLoaderManager()获取到LoaderManager实例 可以使用 initLoader() 或 restartLoader() 方法开始进行数据的加载...onLoaderReset(Loader<String loader) { show(null); } ... } Loader 从数据源获取数据,并对数据进行加载...Context context) { super(context); } @Override public String loadInBackground() { //模拟加载

94010

java类加载加载机制

在沙箱组件中包括类装载器结构,类加载器体系结构也是java沙箱的第一道防线,因为程序都是通过类加载器才能够加载到JVM中的。   类加载器有三方面的作用: 1. 它防止了恶意代码去干涉善意代码 2....其中一个大家所熟悉的词就是“双亲委派机制”,所谓“双亲委派机制”,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时...,才自己去加载。... 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。...关于java类加载机制推荐大家看这篇文章《深入探讨 Java 类加载器》,IBM文档,写的很详细。

98510

JVM 类加载机制_类加载机制的作用和过程

事实上,虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型的过程就是虚拟机的类加载机制。...对于jvm类的加载机制,我们主要关注两个问题: 类的加载时机?(初始化的五种情况) 类的加载过程?...(类的五个加载过程) 二、类的加载时机 1.类的生命周期 类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括加载、验证、准备、解析、初始化、使用和卸载。...2.类的加载时机 这里的“加载”只是类加载过程的一个阶段,代表这“类的加载”的这一过程的开始,jvm并没有强制性约束在什么时候开始类加载过程。 一般我们说类的加载,指的是整个加载过程。...1.加载 加载”是由类加载器完成的“类加载过程”的第一个阶段,在初始化之前完成。

52520

【Java 虚拟机原理】Android加载机制 ( 双亲委派机制 | BootClassLoader | PathClassLoader | DexClassLoader )

文章目录 一、Android加载机制 二、双亲委派机制 一、Android加载机制 ---- Android 中的类加载 使用了 双亲委派 机制 , 如下图所示 : 在 Android 中提供了...3 个类加载器 , BootClassLoader , PathClassLoader , DexClassLoader ; 双亲委派机制 , 是 委派层级 上的 上下层级关系 , 并不是说 3...查询 : 查询自己是否加载过 A ; 如果加载过则不需要再进行加载 ; 如果没有加载过 , 则 查询自己是否可以加载 ; ④ BootClassLoader 查询是否可以加载 : 如果自己可以加载 A...A , 则 抛出 Class Not Found 异常 ; 整个过程就是 从下到上 询问 , 然后 从上到下 委派 ; 二、双亲委派机制 ---- 类加载器层级 : 由高到低 : BootClassLoader...-> PathClassLoader / DexClassLoader ; 双亲委派机制 : 自定义的类加载器 MyClassLoader 加载一个 Class 类对象 Student , 可以 指定

59220

Android在多种设计下实现懒加载机制的方法

前言 前段时间在自己的练习项目中想用到懒加载机制,查看了大多数资料只介绍了在 View Pager + Fragment 组合的情况下实现的懒加载,但是现在大多数App更多的是 Fragmentmanager...关于懒加载 1. 什么是懒加载? 懒加载也叫延迟加载,在APP中指的是每次只加载当前页面,是一种很好的优化APP性能的一种方式。 2.为什么要用懒加载?...1.1遇到的问题 在我们平时开发中,经常使用 ViewPager+Fragment 的组合来实现左右滑动的页面设计(如上图),但是 ViewPger 有个 预加载 机制,默认会把 ViewPager 当前位置的左右相邻页面预先初始化...(俗称预加载),即使设置 setOffscreenPageLimit(0) 也无效果,也会预加载。...数据初始化只应该加载一次,因此,引入第二个标志位, isInitData ,初始为 false, 在数据加载完成之后,将其赋值为 true ,下次返回此页面时不会再自动加载

1.3K30

JVM之类加载机制

双亲委派模型的工作过程为:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的加载器都是如此,因此所有的类加载请求都会传给顶层的启动类加载器...,只有当父加载器反馈自己无法完成该加载请求(该加载器的搜索范围中没有找到对应的类)时,子加载器才会尝试自己去加载。...解释:为了不让我们写System类,类加载采用委托机制,这样可以保证爸爸们优先,爸爸们能找到的类,儿子就没有机会加载。...但是,我们可以自己定义一个类加载器来达到这个目的,为了避免双亲委托机制,这个类加载器也必须是特殊的。...由于系统自带的三个类加载器都加载特定目录下的类,如果我们自己的类加载器放在一个特殊的目录,那么系统的加载器就无法加载,也就是最终还是由我们自己的加载加载

20510

JVM 类加载机制

其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。...类的加载: 查找并加载类的二进制数据 加载是类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情: 【1】通过一个类的全限定名来获取其定义的二进制字节流。...类加载器并不需要等到某个类被“首次主动使用”时再加载它,JVM规范允许类加载器在预料某个类将要被使用时就预先加载它,如果在预先加载的过程中遇到了.class文件缺失或存在错误,类加载器必须在程序首次主动使用该类时才报告错误...加载 .class文件的方式: 【1】从本地系统中直接加载; 【2】通过网络下载 .class文件; 【3】从zip,jar等归档文件中加载 .class文件; 【4】从专有数据库中提取 .class...在 Java中对类变量进行初始值设定有两种方式: 【1】声明类变量时指定初始值; 【2】使用静态代码块为类变量指定初始值; JVM初始化步骤: 【1】假如这个类还没有被加载和连接,则程序先加载并连接该类

47520
领券