gpt4 book ai didi

android - 是否有任何理由从资源中预加载可绘制对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:49 26 4
gpt4 key购买 nike

Android 是否维护应用程序可绘制资源的内存缓存并重用它们,或者预加载可能动态分配给不同小部件的所有可绘制资源是一种好的做法吗?

例如:

public static final int[] SETS = {
R.drawable.set0, R.drawable.set1, R.drawable.set2,
R.drawable.set3, R.drawable.set4, R.drawable.set5, R.drawable.set6,
R.drawable.set7, R.drawable.set8, R.drawable.set9, R.drawable.set10};
public Drawable[] sets;

void init() {
load(sets, SETS);
}

public void load(Drawable[] d, int[] ids) {
for (int i = 0; i < ids.length; i++) {
if (ids[i] == 0)
d[i] = null;
else
d[i] = context.getResources().getDrawable(ids[i]);
}
}

最佳答案

这听起来像是不必要的预优化。但是,android 会缓存可绘制对象,因此您不必预加载它们。相关代码来自ApplicationContext

  /*package*/ Drawable loadDrawable(TypedValue value, int id)
throws NotFoundException {
.
.
.

final long key = (((long) value.assetCookie) << 32) | value.data;
Drawable dr = getCachedDrawable(key);

if (dr != null) {
return dr;
}

.
.
.

if (dr != null) {
dr.setChangingConfigurations(value.changingConfigurations);
cs = dr.getConstantState();
if (cs != null) {
if (mPreloading) {
sPreloadedDrawables.put(key, cs);
} else {
synchronized (mTmpValue) {
//Log.i(TAG, "Saving cached drawable @ #" +
// Integer.toHexString(key.intValue())
// + " in " + this + ": " + cs);
mDrawableCache.put(key, new WeakReference<Drawable.ConstantState>(cs));
}
}
}
}

return dr;
}

private Drawable getCachedDrawable(long key) {
synchronized (mTmpValue) {
WeakReference<Drawable.ConstantState> wr = mDrawableCache.get(key);
if (wr != null) { // we have the key
Drawable.ConstantState entry = wr.get();
if (entry != null) {
//Log.i(TAG, "Returning cached drawable @ #" +
// Integer.toHexString(((Integer)key).intValue())
// + " in " + this + ": " + entry);
return entry.newDrawable(this);
}
else { // our entry has been purged
mDrawableCache.delete(key);
}
}
}
return null;
}

关于android - 是否有任何理由从资源中预加载可绘制对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10135216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com