当前位置: 首页 > news >正文

五个网站页面浙江建筑培训网

五个网站页面,浙江建筑培训网,icp备案网站要先建好吗,dede网站模板客*本篇文章已授权微信公众号 guolin_blog #xff08;郭霖#xff09;独家发布 本节课程主要分为3块#xff1a; 1.一步步手动实现热修复(一)-dex文件的生成与加载2.一步步手动实现热修复(二)-类的加载机制简要介绍3.一步步手动实现热修复(三)-Class文件的替换 本节示例所…*本篇文章已授权微信公众号 guolin_blog 郭霖独家发布 本节课程主要分为3块 1.一步步手动实现热修复(一)-dex文件的生成与加载2.一步步手动实现热修复(二)-类的加载机制简要介绍3.一步步手动实现热修复(三)-Class文件的替换 本节示例所用到的任何资源都已开源项目中包含工程中所用到代码、示例图片、说明文档。项目地址为 https://code.csdn.net/u011064099/sahadevhotfix/tree/master 本节内容是为了给下节内容做知识铺垫所以如果要需要了解热修复技术本节内容的知识点必不可少。 一个类在被加载到内存之前要经过加载、验证、准备等过程。经过这些过程之后虚拟机才会从方法区将代表类的运行时数据结构转换为内存中的Class。 我们这节内容的重点在于一个类是如何被加载的所以我们从类的加载入口开始。 类的加载是由虚拟机触发的类的加载入口位于ClassLoader的loadClassInternal()方法 // This method is invoked by the virtual machine to load a class.private Class? loadClassInternal(String name)throws ClassNotFoundException{// For backward compatibility, explicitly lock on this when// the current class loader is not parallel capable.if (parallelLockMap null) {synchronized (this) {return loadClass(name);}} else {return loadClass(name);}} 这段方法还有段注释说明这个方法由虚拟机调用用来加载一个类。我们看到这个类的内部最后调用了loadClass()方法。那我们进入loadClass()方法看看 public Class? loadClass(String name) throws ClassNotFoundException {return loadClass(name, false);} loadClass()方法方法内部调用了loadClass()的重载方法 protected Class? loadClass(String name, boolean resolve)throws ClassNotFoundException{synchronized (getClassLoadingLock(name)) {// First, check if the class has already been loadedClass? c findLoadedClass(name);if (c null) {long t0 System.nanoTime();try {if (parent ! null) {c parent.loadClass(name, false);} else {c findBootstrapClassOrNull(name);}} catch (ClassNotFoundException e) {// ClassNotFoundException thrown if class not found// from the non-null parent class loader}if (c null) {// If still not found, then invoke findClass in order// to find the class.long t1 System.nanoTime();c findClass(name);// this is the defining class loader; record the statssun.misc.PerfCounter.getParentDelegationTime().addTime(t1 - t0);sun.misc.PerfCounter.getFindClassTime().addElapsedTimeFrom(t1);sun.misc.PerfCounter.getFindClasses().increment();}}if (resolve) {resolveClass(c);}return c;}} loadClass()方法大概做了以下工作 首先查找该类是否已经被加载.如果该ClassLoader有父加载器那么调用父加载器的loadClass()方法.如果没有父加载器则调用findBootstrapClassOrNull()方法进行加载该方法会使用引导类加载器进行加载。普通类是不会被该加载器加载到的所以这里一般返回null.如果前面的步骤都没找到那调用自身的findClass()方法进行查找。 好ClassLoader的findClass()方法是个空方法所以这个过程一般是由子加载器实现的。Java的加载器这么设计是有一定的渊源的感兴趣的读者可以自行查找书籍了解。 protected Class? findClass(String name) throws ClassNotFoundException {throw new ClassNotFoundException(name);} 在Android中ClassLoader的直接子类是BaseDexClassLoader我们看一下BaseDexClassLoader的findClass()实现 Overrideprotected Class? findClass(String name) throws ClassNotFoundException {Class clazz pathList.findClass(name);if (clazz null) {throw new ClassNotFoundException(name);}return clazz;} Tips: 有需要虚拟机以及类加载器全套代码的请使用以下命令克隆: git clone https://android.googlesource.com/platform/dalvik-snapshot 相关代码位于项目的ics-mr1分支上。 看到这里我们可以知道Android中类的查找是通过这个pathList进行查找的而pathList又是个什么鬼呢 在BaseDexClassLoader中声明了以下变量 /** structured lists of path elements */private final DexPathList pathList; 所以我们可以看看DexPathList的findClass()方法做了什么 public Class findClass(String name) {for (Element element : dexElements) {DexFile dex element.dexFile;if (dex ! null) {Class clazz dex.loadClassBinaryName(name, definingContext);if (clazz ! null) {return clazz;}}}return null;} 这里通过遍历dexElements中的Element对象进行查找最终走的是DexFile的loadClassBinaryName()方法 public Class loadClassBinaryName(String name, ClassLoader loader) {return defineClass(name, loader, mCookie);}private native static Class defineClass(String name, ClassLoader loader, int cookie); 到此为止我们就将类的加载过程梳理完了。 下一节课我们将会介绍如何实现类的替换。
http://www.pierceye.com/news/463237/

相关文章:

  • 秦皇岛网站推广价钱南京建设网站制作
  • 2018钓鱼网站建设邢台seo公司
  • 深圳建设交易中心网站域名网站建设
  • 做网站色弱可以吗一个网址多少钱
  • 如何查询网站接入信息产品营销网站
  • 常用博客建站程序遂溪网站开发公司
  • 网站开发软件系统安徽通皖建设工程有限公司网站
  • 意派网站开发新手篇做平面常用的网站
  • 广州网站设计费用深圳室内设计师网
  • 有什么可以做兼职的网站吗建设网站的需求分析
  • 专门做进口产品的网站6wordpress赚钱方法
  • 长兴网站建设公司郫县城乡规划建设管理局网站
  • 天津建设工程信息网站搜索引擎推广是什么工作
  • 网站的系统建设方式网站建设报价表格
  • 商城展示网站建设我劝大家不要学android
  • 官网的建站过程云南网站建设营销
  • 那个网站上有打码的任务做台州做网站的公司
  • 做公司网站 需要注意什么汕尾市住房和城建设局网站
  • 建立音乐网站网络媒体设计是什么
  • html网站怎么进入后台网站建设完成之后要索取哪些
  • 做炭化料的网站国外可以做非法网站吗
  • 厦门 网站建设 网站开发 未来网络做百科专用参考链接的网站
  • 手机网站友情链接怎么做网站轮播图
  • 网站做支付宝花呗分期设计师联盟网是谁创建的
  • 辽宁手机版建站系统开发高平市规建设局网站
  • 免费电子商务网站建设个人网站心得
  • 2003 iis网站发布网站c2g的代表性电商平台
  • 用asp做网站的可行性分析哪个网站做美食视频
  • 瓷砖网站模板建设网站虚拟主机
  • 陇西哪里能学做网站百度识图网页版在线使用