Android 是否缓存了dimen值?
执行以下操作是否有任何性能提升:Android 是否缓存了dimen值?,android,Android,执行以下操作是否有任何性能提升: final int pixels = getResources.getDimensionPixelSize(R.dimen.pixels); for (CustomView view: views) { view.setPixelValue(pixels); } public int getDimensionPixelSize(int id) throws NotFoundException { synchronized (mAccessLoc
final int pixels = getResources.getDimensionPixelSize(R.dimen.pixels);
for (CustomView view: views) {
view.setPixelValue(pixels);
}
public int getDimensionPixelSize(int id) throws NotFoundException {
synchronized (mAccessLock) {
TypedValue value = mTmpValue;
if (value == null) {
mTmpValue = value = new TypedValue();
}
getValue(id, value, true);
if (value.type == TypedValue.TYPE_DIMENSION) {
return TypedValue.complexToDimensionPixelSize(
value.data, mMetrics);
}
throw new NotFoundException(
"Resource ID #0x" + Integer.toHexString(id) + " type #0x"
+ Integer.toHexString(value.type) + " is not valid");
}
}
vs
或者是缓存了dimens值/字节码优化了/其他一些优化使得这变得多余了吗?更深入地研究,直到哪一个是本地的,这是不可能的。但是,从Resources.getDimensionPixelsize()
source可以说:
final int pixels = getResources.getDimensionPixelSize(R.dimen.pixels);
for (CustomView view: views) {
view.setPixelValue(pixels);
}
public int getDimensionPixelSize(int id) throws NotFoundException {
synchronized (mAccessLock) {
TypedValue value = mTmpValue;
if (value == null) {
mTmpValue = value = new TypedValue();
}
getValue(id, value, true);
if (value.type == TypedValue.TYPE_DIMENSION) {
return TypedValue.complexToDimensionPixelSize(
value.data, mMetrics);
}
throw new NotFoundException(
"Resource ID #0x" + Integer.toHexString(id) + " type #0x"
+ Integer.toHexString(value.type) + " is not valid");
}
}
- 它将通过
锁定资源(请阅读,如果您的其他线程将在同一时刻尝试访问资源,则其中一个线程将等待)李>synchronized(mAccessLock)
- 它将调用
TypedValue.complexToDimensionPixelSize()中的一些浮点数学李>
- 它可能会创建
对象李>TypedValue
- 它将至少进行5次方法调用李>
- 它可能会创建
int像素=0;
Resources res=getResources();
长毫秒=System.currentTimeMillis();
对于(int i=0;i<100000;i++){
像素=res.getdimension像素大小(R.dimen.my_dimen);
}
Log.e(标记“Time”+(System.currentTimeMillis()-ms));
在使用Android棒棒糖的S6上,它的通话时间约为816毫秒,即8160纳秒/次
最后,在您的情况下(我相信您最多有10-20次迭代),就性能而言,这并不重要。在更多的迭代中和/或在访问中的资源时的一些并发性可能是重要的
就我个人而言,我建议在室外进行,以获得更好的风格和较小但速度仍有所提高