美文网首页
1.1Android资源打包、加载及缓存

1.1Android资源打包、加载及缓存

作者: 莫名Moons | 来源:发表于2016-11-29 13:11 被阅读131次

<p>本篇文章,我们将介绍apk生成的大致流程,并通过大量的案例来展示各种资源的加载过程。</p>


<p>首先说一下资源是怎么生成的。资源生成的工具叫做 AAPT , AAPT 是一个可执行的工具,主要负责资源的编译和打包。</p>

资源的打包

  • XML 文件通过 AAPT 编译会生成一个编译过的 XML 文件
  • Values 编译过后没有一个对等的文件,编译过后的 dimens 、 colors 文件数值会存储在 Android 的一个资源包里 resource.arsc , resource.arsc 是一个资源的索引。
  • Image 通过 AAPT 会 Crunch , Crunch 会将 png 进行压缩形成 Android 系统的 Image 文件;值得一提的是,我们在制作** 点9图 **时会有一些伸缩的信息,而 Crunch 不会将这些信息存储起来,而是将数据保存在 resource.arsc 文件里面。
  • Raw文件就相对简单,直接Copy进APK包里的Raw文件中

Resource ID(资源ID)

我们在编写代码的时候会对 XML、Values 等资源进行引用,这时候我们会通过 R.Java 文件去引用。实际上 AAPT 在将资源文件编译成 R 文件之前 会先将资源文件转化成一个 R.text 然后再将 R.text 转化成 R.java,而在 R.java 文件里面,引用的资源是用 Resource ID 来标识的。所以在这里我们有必要介绍一下 Resource ID。
<p> Resource ID 是由一个4个字节的 int 组成的,而 Resource ID 又可以拆分成三个部分:</p>

Resource ID的逻辑结构
  • 第一个字节表示这个资源是属于哪一个包的
  • 第二个字节表示这个资源是什么类型的
  • 第三、四个字节就是表示这个资源所唯一的标识符

getString( )



getString()引用String资源的流程:

1. getString();409Context(android.context),Context.java
2. getString();400,Resources(android.context.res),Resources.java
3. getText();308,Resources(android.context.res),Resources.java
5. getResourcesText();105,AssetManager(android.context.res),AssetManager.java
getString( ) 逻辑结构图

getLayout( )

<p>
getLayout()引用Layout资源的流程:</p>

1. getLayout();1165,Resources(android.content.res),Resources.java
2. loadXmlResourceParser();2776,Resources(android.content.res),Resources.java
3. loadXmlResourceParser();2803,Resources(android.content.res),Resources.java
4. openXmlBlockAsset();485,AssetManasger(android.content.res),AssetManager.java
Xml Block逻辑图 getLayout( )逻辑结构

getDimention( )

<p>
getDimention( )流程图:
</p>

1. getDimention();620,Resources(android.content.res),Resources.java
2. getValue();1347,Resources(android.content.res),Resources.java
3. getResourcesValue();196,AssetManager(android.content.res),AssetManager.java
getDimention( ) 逻辑结构

getDrawable( )

getDrawable( )结构流程图

完结

相关文章

  • 1.1Android资源打包、加载及缓存

    本篇文章,我们将介绍apk生成的大致流程,并通过大量的案例来展示各种资源的加载过程。 首先说一下资源是怎么生成的。...

  • 如何进行网站性能优化

    JavaScript 压缩和模块打包 按需加载资源 在使用 DOM 操作库时用上 array-ids 缓存 启用 ...

  • webkit资源加载机制

    资源加载器 1. 特定资源加载器,加载特定资源,比如image对应ImageLoader 2. 缓存机制的资源加载...

  • webpack学习笔记-3(生产环境配置)

    生产环境配置 如何让用户更快加载资源,包括: 如何压缩资源 如何添加环境变量优化打包 如何最大限度地利用缓存等 为...

  • 【2019-PyQT5】Pyqt4 update Pyqt5

    减小打包后运行文件大小及运行负担,缩短启动时间A、系统资源图片不加载到qrcB、业务内容资源图片加载到qrc,转换...

  • android系统性总结

    1.gradle操作 1.1Android打包之多版本、多环境、多渠道

  • 浏览器缓存机制

    浏览器缓存分为强缓存和协商缓存。 强缓存 浏览器加载资源时,会先根据本地缓存资源 header 中的信息(expi...

  • 前端性能优化思路

    资源加载方面 资源缓存 CDN 图片懒加载、雪碧图 svg、字体图标 GZIP 去除注释、调试代码 解析渲染方面 ...

  • 浏览器缓存问题

    1. 浏览器缓存基本类型 强缓存浏览器加载资源时,会先根据本地缓存资源的 header 中的 Expire 和 ...

  • Glide详解

    缓存类型 活动资源当前图片资源正在使用的时候,会被放入活动缓存 内存缓存图片最近被加载过,而且没有在使用中,会被放...

网友评论

      本文标题:1.1Android资源打包、加载及缓存

      本文链接:https://www.haomeiwen.com/subject/gfyapttx.html