来源于慕课网。
1 资源加载流程
我们所说的资源是指assets,res目录下的drawable,layout,color,string,id等等,obtainStyledAttributes。方法调用都是从context到Resources,最后到AssetManager。然后在NativeAssetManager里处理。见图。
2 资源替换方案
从资源加载流程可以发现,替换方案从Resources或者AssetManager下手。
2.1 资源包装流
包装Resources,当然是对其大部分方法都要包装。优先去加载我们添加进去的资源。没有找到,则去走系统的流程。是一个麻烦的过程。
2.2 资源缓存
系统Resources里获取资源时,会先从缓存里获取,获取不到则去AssetManager里找。所以可以通过反射将要加载的资源添加进缓存。这样的过程很明显受限于系统缓存的内容,而且由于不同的版本字段会有所变化,适配过程繁琐。