加速复杂的Android View通胀

时间:2011-08-18 03:01:19

标签: android layout layout-inflater

我有一个相对较大的XML布局(38 kB,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中的微调器上,并加载... “对话。

广泛使用主题是否会减慢观看通胀?视图inflater不需要查看加载的theme.xml,但如果我将主题内联到布局xml中,它也会大大增加XML的大小,从而减慢解析器的速度。

我能做些什么来简化布局,使其加载速度至少快两倍? 我想我可能会试图摆脱水平的LinearLayouts,并使用TableLayout构建“部分”。

2 个答案:

答案 0 :(得分:6)

首先,三个一般性评论:

  1. 确实想要避免深层嵌套的布局。
  2. 考虑使用RelativeLayout替换嵌套的LinearLayouts
  3. 使用layout_opt工具获取有关布局优化的一些建议。
  4. 现在,更多关于#1 ......您是否考虑过编写自己的布局?起初听起来很复杂,但它有时可以大大提高布局性能。例如,如果RelativeLayout不能达到目的,您可以将线性框架线性线性链组合成一个自定义布局。

    最后,您的标签指示符是否可滚动?这似乎是导航/用户体验问题。

答案 1 :(得分:0)

我唯一能想到的就是将你的观点分成几个不同的部分,并在用户到达那个部分时给每个视图充气。不确定这有什么帮助,但祝你好运。

也可以帮助查看traceview中代码的那部分