【发布时间】:2011-09-12 18:52:43
【问题描述】:
我正在使用自定义绘制的视图实现一个 ListView 活动,并具有以下代码:
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
....
canvas.drawText(String.format("%02d: %dx%d", position, w, h),
10, 15, cached_paint);
}
onDraw 方法中几乎没有其他内容,所以这让我很生气,为什么滚动效果如此之差。偶然我将drawText参数更改为不使用String.format,突然滚动又变成了黄油丝。事实上,以下内容几乎相同,但表现良好:
canvas.drawText("" + position + ": " + w + "x" + h,
10, 15, cached_paint);
我惊呆了。为什么后者比调用 String.format 更快?我希望对象连接会产生更多的中间对象和一般的垃圾性能,但我发现恰恰相反。事实上,当使用 String.format 运行时,我从 vm 收到了很多分配/解除分配消息。
那么为什么 String.format 显然可以更快(至少来自其他创建对象昂贵的编程语言时)却如此慢?
【问题讨论】:
标签: android performance string listview format