2.21 ResourceManager源码解析

less than 1 minute read

2.13.1 Drawable加载流程

  • Context#getResource().getDrawable(R.xxx.xxx)
    • ComtextImpl#getResource - > ResourcesManager#getResource -> ResourcesManager#getOrCreateResources
        1. 通过ResourceKeymap缓存获取资源对象
        1. 没有缓存则从ResourcesImpl#createResourceImpl()加载资源
    • ResourcesImpl#createResourceImpl()加载资源, 通过创建AssetManager获取系统路径解析resources.arsc映射表, 获取资源的索引
    • Resource#loadDrawable -> mAssets#openAsset() -> Drawable#createFromResourceStream, 加载资源文件