美文网首页
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-资源加载

    Android资源:包括图片、XML文件等资源。 APP在打包的时候,把这些资源索引全部打包进入resources...

  • A008-drawable资源

    关于drawable资源笔者之前有写过两篇文章:Android-自定义图像资源的使用(1)Android-自定义图...

  • Android-插件化二插桩实现Service的加载

    Android-插件化一插桩实现Activity的加载[https://www.jianshu.com/p/643...

  • webkit资源加载机制

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

  • ET资源加载

    ET资源加载 结构 ResourcesComponent【资源组件】(用于加载资源)AssetsBundleLoa...

  • Spring IoC 体系分析

    一. 统一资源加载策略: Spring 将资源的定义和资源的加载区分出来资源描述接口: Resource资源加载规...

  • Kingfisher 加载 gif 图

    加载本地资源 2.加载网络资源

  • 加载资源

    @(javascript)[页面xrr] 加载资源 加载资源的形式 输入url(或跳转页面)加载html 加载静态...

  • 运行环境

    一、加载资源的形式 输入URL(或跳转页面)加载HTML 加载HTML中的静态资源 二、加载资源的过程 DNS解析...

  • Android-加载webview

    1、在onCreate中创建webview 2、webview方法调用 3、webview的activity_we...

网友评论

      本文标题:Android-资源加载

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