2015-09-10 3 views
1

При загрузке Fragment с огромной нагрузкой просмотров (100+) какДолжен ли я обрабатывать огромную нагрузку просмотров в отдельном потоке?

layout_settings_1 = (RelativeLayout) rootView.findViewById(R.id.layout_settings_1); 
layout_settings_2 = (RelativeLayout) rootView.findViewById(R.id.layout_settings_2); 

. 
. 
. 

layout_settings_n = (RelativeLayout) rootView.findViewById(R.id.layout_settings_n); 

Если мы обрабатываем эти задания в отделенной Thread?

Обращаем ваше внимание: RelativeLayout является всего лишь примером. Это может быть любой тип View.

+0

Лучшим решением было бы не использовать 100+ видов во фрагменте. – Egor

+0

это указывает на то, что что-то может быть неправильно, когда вы получаете до 100 просмотров в одном фрагменте, и вы используете их все. – njzk2

+0

На самом деле, я не должен использовать их все одновременно. Я знаю, что это может привести к плохой практике, однако клиент хочет запустить iOS на Android. Вот почему. – Machado

ответ

3

Нет, не делайте этого. Поскольку вы не манипулируете иерархией представления, вы можете не получить немедленную ошибку/исключение, но инструментарий андроида UI обычно не является потокобезопасным, поэтому вы не знаете, что произойдет, если изменится иерархия просмотра (в потоке пользовательского интерфейса), а вы используете findViewById (в другом потоке). Кроме того, чтобы фактически использовать любую из переменных вида, вам придется синхронизировать что-то из потока пользовательского интерфейса. Я не вижу никакой причины или пользы для этого.

Из официального docs:

Кроме того, инструментарий Android UI не поточно-.
...
Не обращайтесь к инструментарию Android UI из-за пределов пользовательского интерфейса.

Также я хотел бы указать, что findViewById() на самом деле не «загружает» это представление, поскольку оно скорее выглядит, поэтому не происходит раздувания. Если вы беспокоитесь о производительности, много волнуйтесь при раздувании просмотров, а не при поиске их с помощью findViewById.

Смежные вопросы