Ускорение сложного Android View Inflation - PullRequest
0 голосов
/ 18 августа 2011

У меня относительно большой XML-макет (38 КБ, 600 строк) с иерархией, такой как:

<ScrollView>
 <LinearLayout>
  <TabHost>
   <LinearLayout> 
    <FrameLayout> //tab widget
     <LinearLayout> //tab content
      <LinearLayout> //section
       <TextView> //section name
       <LinearLayout orientation="horizontal"> //item 1 box
        <TextView> //item 1 title
        <Spinner> //item 1 picker
       </LinearLayout>
       <LinearLayout> //item 2 box
        <TextView> //item 2 title
        <Spinner> //item 2 picker
       </LinearLayout>
       ...  //18 other items
      </LinearLayout>
      ... //4 other sections with 15 items each
</>

Это форма ввода данных, которая должна иметь столько элементов и лучшее, что я могу сделать сейчаснужно сделать, чтобы обернуть setContentView и загрузить данные в счетчики в AsyncTask с помощью диалогового окна «Загрузка ...».

Замедляет ли интенсивное использование тем замедление инфляции представления?Инфлятору представления не нужно будет искать в загруженном theme.xml, но если бы я вставил тему в макет xml, это также значительно увеличило бы размер XML, таким образом замедляя анализатор.

Могу ли я что-нибудь сделать, чтобы упростить макет, который бы загружал его как минимум вдвое быстрее?Я думаю, что я мог бы попытаться избавиться от горизонтальных LinearLayouts и построить «раздел» с помощью TableLayout.

Ответы [ 2 ]

6 голосов
/ 18 августа 2011

Во-первых, три общих комментария:

  1. Вы действительно хотите избежать глубоко вложенных макетов.
  2. Попробуйте использовать RelativeLayout для замены вложенного LinearLayouts.
  3. Используйте инструмент layout_opt, чтобы получить предложения по оптимизации макета.

Теперь, подробнее о # 1 ... Вы думали написать свой собственный макет? Сначала это звучит сложно, но иногда может значительно улучшить производительность макета. Например, если RelativeLayout не подходит для этой цели, вы можете объединить цепочку Linear-Frame-Linear-Linear в один пользовательский макет.

Наконец, есть ли причина, по которой прокручиваются индикаторы на ваших вкладках? Это похоже на проблему навигации / UX.

0 голосов
/ 18 августа 2011

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

Также может помочь просмотреть эту часть кода в traceview

...