android中Resources的资源缓存机制

本文将探讨ImageView的setImageResource方法如何触发Resources的资源加载,并揭秘Android系统内部的资源缓存工作原理,帮助开发者优化应用性能。
摘要由CSDN通过智能技术生成

通过梳理下ImageView的setImageResource方法的调用流程,来看下android中Resources的资源缓存机制。

public void setImageResource(int resId) {
        // The resource configuration may have changed, so we should always
        // try to load the resource even if the resId hasn't changed.
        final int oldWidth = mDrawableWidth;
        final int oldHeight = mDrawableHeight;

        updateDrawable(null);
        mResource = resId;
        mUri = null;

        resolveUri();

        if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
            requestLayout();
        }
        invalidate();
    }
先调用updateDrawable将mDrawable置为null,然后调用resolveUri方法。

private void resolveUri() {
        ... ...

        if (mResource != 0) {
            try {
                d = mContext.getDrawable(mResource);
            } catch (Exception e) {
                Log.w("ImageView", "Unable to find resource: " + mResource, e);
                // Don't try again.
                mUri = null;
            }
        } else if (mUri != null) {
            ... ...
        } else {
            ... ...
        } else {
            return;
        }

        updateDrawable(d);
    }
resolveUri中会调用Context的getDrawable方法。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值