Простой TextView.setText вызывает загрузку ЦП на 40%

Запуск моего приложения вызывает загрузку ЦП моего телефона на ~40%:

final String position = String.format("%02d:%02d:%02d", time.getHours(), time.getMinutes(),
                time.getSeconds());
getActivity().runOnUiThread(new Runnable() {
    @Override
    public void run() {
         c.mTxtPosition.setText(position);
         ...

Закомментировав метод setText, загрузка ЦП падает до ожидаемого уровня ~4%. . Метод вызывается каждую секунду и обновляет ImageViews, CustomViews..., не вызывая такой же избыточной нагрузки. Помимо использования ЦП, dalvik постоянно сообщает о сборке мусора около 10-1000 объектов, просто вызывая setText().

Создание файла трассировки следующим образом:

Debug.startMethodTracing("setText");
c.mTxtPosition.setText(position);
Debug.stopMethodTracing();

traceview перечисляет следующие методы как первые 5 по их соответствующему эксклюзивному % ЦП:

  • ViewParent.invalidateChildInParent(16%)
  • View.requestLayout(11%)
  • ViewGroup.invalidateChild(9%)
  • TextView.setText(7%)
  • toplevel(6%)

Есть ли у кого-нибудь объяснение этому?

25
задан phlebas 29 May 2012 в 19:09
поделиться