Я выполнял действие 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 я получал много сообщений о выделении / освобождении от виртуальной машины.
Так почему String.format такой медленный, когда он, очевидно, может быть быстрее (по крайней мере, если исходить из других программязыки, на которых создание объекта стоит дорого)?