Можно ли постоянно обновлять текст TextView без выделения дополнительной памяти? - PullRequest
3 голосов
/ 19 февраля 2012

Я реализовал счетчик прошедшего времени, который использует TextView для отображения прошедшего времени с точностью до сотых долей секунды. При каждом обновлении моя текущая реализация считывает истекшее время, выделяет новый String, отформатированный для чтения пользователем, и обновляет текст TextView этим String.

Кажется огромной тратой памяти, что каждый String используется только один раз в течение доли секунды, а затем быстро отбрасывается навсегда. Есть ли способ постоянно обновлять текст TextView без выделения дополнительной памяти для нового String каждый раз?

Вот метод, который я сейчас использую для форматирования моего текста:

public static String formatTime(long time) {
    int minute = (int) (time / 60000);
    int second = (int) (time / 1000) % 60;
    int hundredth = (int) (time / 10) % 100;
    return String.format("%02d:%02d:%02d", minute, second, hundredth);
}

Вызывающая функция вычисляет истекшее время, вызывает эту функцию, а затем немедленно вызывает setText(String) для TextView.

Ответы [ 2 ]

1 голос
/ 19 февраля 2012

Просматривая документацию по методу setText (), я заметил, что сигнатура метода ..

setText(CharSequence text)

Продолжая копать, я обнаружил, что StringBuilder также реализует интерфейс CharSequence.

Итак, я думаю, что решение будет start using StringBuilder instead of the String объект.

Единственное, что меня беспокоит, это то, что метод String.format () больше не может использоваться, поэтому мы должны начать использовать класс Formatter.

Более подробную информацию можно найти здесь Форматировщик класса .

Надеюсь, это поможет ...

1 голос
/ 19 февраля 2012

Я думаю, вы делаете хорошую работу.Если вы действительно хотите избежать выделения строки, попробуйте StringBuffer .Но затем вы должны отпустить API format и делать все сами, что может быть не так эффективно, как вы думаете.Кроме того, ваша текущая реализация делает потокобезопасным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...