onDraw() и внутренние переменные

Ответить
Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

onDraw() и внутренние переменные

Сообщение elron » 25 фев 2016, 12:59

Всем привет, в классе View есть метод onDraw(), и если создавать в нем переменные, например "int i = list.size();", то это нормально ?! Ведь в таком случае создается куча временных переменных, которые накапливаются со временем. Если это так, то может быть использовать статичные переменные ?! Или о переменных внутри этого метода не стоит беспокоиться ?!

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: onDraw() и внутренние переменные

Сообщение Mikhail_dev » 26 фев 2016, 00:19

если это примитивный тип, то проблем быть не должно. Они внутри метода используют стековую память, которая более быстрая чем хип, при этом все переменные будут очищаться с памяти по выходу с метода. Не знаю, будет ли профит в производительности, если вынести примитивную переменную в поле класса, но думаю что не будет. Всё сказанное относится к примитивным типам.
Объектные типы (например объект Paint) создавайте в других методах или конструкторах, потому тчо операция создания объекта довольно долгая. Лично я использую конструктор.

math64
Сообщения: 235
Зарегистрирован: 16 июл 2012, 07:47

Re: onDraw() и внутренние переменные

Сообщение math64 » 26 фев 2016, 08:20

Дело не в создании объекта - большинство объектов, как например, String, создаются быстро. Дело в том, что после выхода из функции они отправляются в мусор, а сборка мусора - это медленно.
Иногда объекты создаются неявно, напр. int превращается в Integer или итератор при просмотре списка.

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: onDraw() и внутренние переменные

Сообщение elron » 26 фев 2016, 08:44

"при этом все переменные будут очищаться с памяти по выходу с метода"
"Дело в том, что после выхода из функции они отправляются в мусор, а сборка мусора - это медленно"
Я именно об этом.. получается что нужно использовать статичные переменные в таких методах ?! а как на счет final переменной в методе ? или это не поможет ?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: onDraw() и внутренние переменные

Сообщение Mikhail_dev » 26 фев 2016, 14:32

math64 писал(а):Дело не в создании объекта - большинство объектов, как например, String, создаются быстро. Дело в том, что после выхода из функции они отправляются в мусор, а сборка мусора - это медленно.
Иногда объекты создаются неявно, напр. int превращается в Integer или итератор при просмотре списка.
Всё верно. Именно это я и имел ввиду. Но вот и создание объекта тоже является не быстрым занятием, если сравнивать с примитивом
Я именно об этом.. получается что нужно использовать статичные переменные в таких методах ?!
В вашем примере примитивный тип, а не объектный. не путайте это. Для объектов если они создаются и их можно менять, то лучше использовать поля класса. Но если дело касается строк, то тут надо использовать для их конкатенации StruindBuilder, иначе смысла никакого не будет, ибо строки являются неизменяемыми (immutable), и их вынос в поле класса никакого результата не даст

Ответить