获取资源那些事
先从R.java中找到对应ID所对应的资源名称 再去arsc后缀文件中查找对应的资源路径利用AssetManager在native层打开该资源文件
大致链路
Context的getResource—》Resource----》AssetManager—》Native层AssetManager打开资源文件
Zygote替你做的事zygote会进行调用prepareresource方法 这个方法创建了Resource中的msystem 代表系统资源 和Assetmanager中的mAsset 代表系统资源 这两个静态变量。因此app进程可以共享这两个变量。
prepareresource在prepareresource方法中会创建一个Assetmanager并调用addpath将framework-res.apk 系统资源APK 中的资源添加到assetmanager中 这个assetmanager对象就是assetmanager中的静态变量mAsset对象 它代表framework的资源 接下来会进行添加字符串池操作把framework涉及到的资源文件名添加到常量池中。
创建mresource和masset最后创建Resource对象将上面创建出来的mAsset传入到resource构造函数中 这样就完成了系统测的资源添加过程并且mresource和masset这两个代表系统资源的静态对象也创建完成了。
App进程由于是zygote进行fork出来的所以共享这两个变量。
流程
1.在即将创建Activity的时候会创建context上下文对象 通过basecreatecontextimpl生成contextimpl对象
2.contextimpl对象中会初始化mresources变量和massets变量 也就是上面Zygote做的操作 这里进行检查一次如果没有则主动进行添加framew-res.apk的资源
3.该过程第一步也就是创建assetmanager 在assetmanager的构造方法中会进行添加framework-res.apk的路径也就是构造方法中就已经调用了一次addpath来把framework的资源加到资源管理者当中
4.第二部会再次调用assetmanager的addpath方法来把当前应用apk的路径添加到其中 然后将资源文件名添加到字符串常量池中。这时候assetManager不仅可以访问到framework资源也可以访问到应用资源 但是这步只是生成了资源管理者
5.最后一步创建出一个resource对象 将assetmanager传入到构造方法中即可返回该resource便是context的getresource返回值
这时候应用资源和系统资源都可以使用
查找方法
根据资源id在arsc中查找如果不是文件直接返回即可 如果是文件则会调用assetmanager的openfile打开文件返回 因为上面进行了adspath把apk中的arsc文件中传了进去所以随后通过arac查找到资源文件
总结frame workres.apk的资源也可以在应用程序中使用是因为在创建assetmanager的时候已经把framework-ree.apk的资源添加进去了 之后又添加了应用程序的apk路径。
TailwindCSS 资源推荐 TailwindCSS 发布了 3.0, 功能也越来越好用,那么是否有与之相关的组件库呢 ?本文是我将推荐我个人认为比较好用的资源。
K8S如何限制资源使用 本文介绍几种在K8S中限制资源使用的几种方法。 在K8S中可以对两类资源进行限制:cpu和内存。 CPU的单位有: 正实数,代表分配几颗CPU,可以是小数点,比如0.5代表0.5颗CPU,意思是一颗CPU的一半时间。
翻译自官网文档:https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and-resources?playlist=30089 翻译多为机器翻译 这是一系列文章,提供了Unity引擎中资产和资源管理的深入讨论。
相关文章
- Kubernetes资源对象:DaemonSet
- SpringMVC REST 风格静态资源访问配置
- Spark(六)Spark之开发调优以及资源调优
- E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
- rac 添加 资源
- .NET Framework 工具 Resgen.exe(资源文件生成器)
- C#获取资源中的图片文件
- 移动端APP应用版本升级更新方案:整包更新及资源在线升级(热更新)
- 极客Web前端开发资源集锦
- 关于UI资源获取资源的好的网站
- Spring源码情操陶冶-PathMatchingResourcePatternResolver路径资源匹配溶解器
- SpringMVC访问静态资源的三种方式
- spring boot 静态资源的映射规则 (2) 替他资源映射