2013-05-09 28 views
2

我正在嘗試改進列表視圖渲染性能並調查現在的微調。 (我們使用viewHolder,獲取圖像異步,暫停滾動圖像顯示,禁用滾動緩存已經)具有可見性元素的膨脹佈局的性能影響

現在我正在檢查佈局,並遇到單個列表項的佈局,如下所示的getView中充氣膨脹。

getView()自定義列表適配器

if (convertView == null) { 
    convertView = inflater.inflate(R.layout.zzz_list_item, null); 
    ...save stuff in holder etc. 

zzz_list_item.xml

<LinearLayout 
    android:id="@+id/layout_success" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/base" 
    android:orientation="vertical" 
    android:paddingBottom="30dp" > 
...many lines of a "success" item layout 
</LinearLayout> 

    <LinearLayout 
    android:id="@+id/layout_failure" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:visibility="gone" > 
    ...many lines for a failure item layout 
</LinearLayout> 

能見度獲取我們的自定義列表視圖適配器的getView方法進一步下行控制

getView()方法 - 執行e非常時期

if(isSuccessfulItem){ 
    ((LinearLayout) convertView.findViewById(R.id.layout_failure)).setVisibility(View.GONE); 
    ((LinearLayout) convertView.findViewById(R.id.layout_success)).setVisibility(View.VISIBLE); 
} else { 
    ((LinearLayout) convertView.findViewById(R.id.layout_failure)).setVisibility(View.VISIBLE); 
    ((LinearLayout) convertView.findViewById(R.id.layout_success)).setVisibility(View.GONE); 
} 

雖然這也可能是一個小的性能豬(getView是昂貴的),我不知道它會是有意義的重構和分割成功和失敗的元素處理成兩個不同的佈局,這將然後分別使用getViewTypeCount()getItemViewType(int position)進行充氣。

即使在通貨膨脹期間設置爲visibility = GONE,我的列表項目佈局的附加失敗佈局代碼(因此文件大小是否增加)是否會影響性能?

任何見解將不勝感激,謝謝。

回答

3

是否其他故障佈局代碼(並因此增加了文件大小 )爲我的列表項的佈局影響性能,哪怕是 設置爲可見=通貨膨脹期間去了哪裏?

無論哪種方式的性能增益或損失是最小的。可見性設置爲gone的視圖在佈局和測量階段不需要計算,因爲它被忽略,但它確實會佔用內存(這是您可以談論的內容)。即使您不需要/使用行佈局的故障部分,也可以使用當前的實現方式佔用內存(將其乘以屏幕上可見的行數)。將當前行分成兩部分將清除內存需求,因爲每行只有實際使用的視圖。

如果我是你,我會實現兩行類型,因爲我認爲它更乾淨(並且它也不會在內存中添加無用的視圖)。

你可能知道這一點,但使用:

convertView = inflater.inflate(R.layout.zzz_list_item, convertView, false); 

也,緩存在持有人行的意見。

+0

感謝您的見解 - 那正是我想知道的。我們正在應用程序中遇到一些內存問題,因此清理這些視圖可能會有助於使應用程序更輕。我知道指定根節點的膨脹,我們正在使用持有者模式,但無論如何,感謝提示! – Makibo 2013-07-11 06:32:41