美文网首页
Android-资源加载

Android-资源加载

作者: 森屿暖茶 | 来源:发表于2021-02-08 16:52 被阅读0次

    Android资源:包括图片、XML文件等资源。

    APP在打包的时候,把这些资源索引全部打包进入resources.arsc文件中,在app加载资源的时候,就需要加载该文件中的索引找到文件进行加载。

    代码中通过getResources()获得Resoures对象,在源码中其实是使用

    通过context对象获取Resources

    我们随便看一个资源获取方法getString().

    context 持有Resources 1 2 通过1,2图我们发现 本质是通过AssetManager类的方法来加载资源的 3 通过1,2,3图我们发现Resources类持有 ResourcesImpl  ResourcesImpl 初始化的时候持有 AssetManager

    我们以Activity的资源创建为例

    getOrCreateResources 创建 getOrCreateResources 方法中  createResourcesImpl创建 ResourcesImpl 对象 createResourcesImpl 方法中 createAssetManager创建AssetManager对象 把资源目录下的资源索引放入其中

    所以activity的资源加载就是加载mResDir路径目录下的资源。

    拓展:

    我们需要加载其他或者指定目录的资源:

    可以通过自己创建的AssetManager对象,反射调用addAssetPath加载自己指定的目录,加载资源。 

    加载指定目录的资源

    但有时候这样加载资源并不能很好的完成需求,这个时候我们根据Context持有Resource,Resource持有ResourcesImpl ,ResourcesImpl 持有AssetManager,层层包装,我们可以根据需求向上包装完成需求,如插件化常常需要包装到Context层来加载资源(因为资源ID重复的问题,涉及到APP打包资源相关问题)。

    raw 文件夹和 assets文件夹区别:

    raw:android在编译的时候会为这个目录的文件夹生成一个ID,在XML使用资源的时候就可以通过这些ID来访问这些资源。直接通过ID访问,访问速度快。

    assets:不会生成ID,只能通过AssetManager访问,因为没有ID所以XML中无法找到资源导致无法使用。访问速度慢。

    相关文章

      网友评论

          本文标题:Android-资源加载

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