Android самый эффективный контейнер для списка - PullRequest
0 голосов
/ 04 июня 2019

( P.S. Я новичок в разработке для Android, поэтому буду признателен за небольшую оценку. )

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

enter image description here

( Я не буду включать XML-код этого представления, поскольку это сделало бы пост излишне большим )

Это пользовательское представление имеет LinearLayout в качестве корневого элемента. Внутри LinearLayout есть еще 2 вложенных LinearLayouts. Даже если на первый взгляд может показаться, что RelativeLayout можно использовать, после пробного запуска всех контейнеров только LinearLayout может достичь этого вида.

Проблема в том, что мне нужно динамически заполнять список моего пользовательского представления (выше). Может варьироваться от 40 до 80. Я попытался динамически сгенерировать 60 из указанных выше пользовательских представлений в моей тестовой среде как дочерние элементы для RecycleView внутри ScrollView.

В моей тестовой среде на моем физическом устройстве (Samsung Galaxy J2) я вижу, что производительность приложения немного, но не слишком сильно. Тем не менее, я вижу, что приложение использует слишком много памяти устройства.

Я прошел много ТАК постов по макетам. Из документов я узнал, что использование слишком большого количества вложенных LinearLayout может создать глубокую и сложную иерархию представлений. Итак, я пытался использовать FrameLayout, RelativeLayout везде, где мог.

Мой сценарий на самом деле не уникален. Если вы разработчик, который читает это и у вас есть некоторый опыт разработки больших приложений, у вас наверняка есть сценарии, в которых вам нужно много раз динамически генерировать пользовательское представление. Итак, что бы совет здесь? В таких приложениях, как Facebook или даже Facebook Lite, или в других приложениях, которые имеют похожие пользовательские представления, заполненные в большом количестве, какие макеты они фактически используют для обеспечения оптимальной производительности? И учитывая мой сценарий, мой подход правильный?

Ответы [ 2 ]

4 голосов
/ 04 июня 2019

Всякий раз, когда вы используете RecyclerView, он создает только представления, достаточные для заполнения экрана / окна просмотра устройства. В остальном все представления являются только «переработанными», т. Е. Представления будут использоваться снова и снова, но только с новыми данными.

Задержка, которую вы можете испытывать, связана с ScrollView поверх RecyclerView. Ваш RecyclerView не должен отставать, если вы не используете тяжелые изображения без Glide / Picasso для загрузки изображений.

0 голосов
/ 04 июня 2019

RecyclerView - это ViewGroup, добавленная в андроид студию как преемник GridView и ListView.Это улучшение для них обоих, и его можно найти в последних пакетах поддержки v-7.Он был создан, чтобы сделать возможным создание любых списков с XML-макетами в качестве элемента, который можно значительно настраивать при одновременном повышении эффективности ListViews и GridViews.Это улучшение достигается путем повторного использования представлений, которые не видны пользователю.Например, если пользователь прокрутил вниз до позиции, где элементы 4 и 5 видны;пункты 1, 2 и 3 будут удалены из памяти, чтобы уменьшить потребление памяти.

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