標籤:android style blog http io ar color os 使用
大家如果喜歡我的部落格,請關注一下我的微博,請點擊這裡(http://weibo.com/kifile),謝謝
轉載請標明出處(http://blog.csdn.net/kifile),再次感謝
原文地址:http://developer.android.com/training/improving-layouts/loading-ondemand.html
在接下來的一段時間裡,我會每天翻譯一部分關於效能提升的Android官方文檔給大家
效能最佳化布局篇:
[Android 效能最佳化系列]布局篇之減少你的介面層級
[Android 效能最佳化系列]布局篇之通過<include>複用布局
題外話:
很多時候我們都會在布局檔案中加入一些不常使用的控制項,但是我們又真的很少使用它們,但是它們在進行初始化的時候,一樣會消耗我們的系統資源,因此我們應該考慮通過ViewStub來最佳化他,正如在記憶體篇中所說的那樣,只在真正需要的時候使用它。
下面是本次的本文:
################
有時候,你的布局中會有一些比較複雜但是又很少用到的控制項。不管他是訊息詳情,進度條還是未完成的提示資訊,你都可以直到真正需要的時候再載入他們,以降低你的記憶體消耗,提升渲染效率。
定義一個ViewStub
ViewStub是一個沒有任何尺寸的輕量級View,他不會在布局上繪製任何東西或者做其他的工作。這就意味著,初始化以及在布局層級中保留它只需要很少的花費。此外,請記住每一個ViewStub都需要包含一個android:layout屬性來指明他將要顯示布局
下面這個ViewStub制定了一個半透明的進度條,只有當應用中加入新的項時我們才能夠被看到他:
<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" />
載入ViewStub的布局
當你想要載入ViewStub所指定的布局時,你可以選擇性的使用setVisiblity(View.VISIBLE)或者調用inflate()方法。
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);// orView importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
注意:inflate()方法會返回初始化後的View,因此你不需要通過findViewById來尋找這個View
一旦指定的布局顯示出來或者說初始化完成,那麼ViewStub元素就不再是布局層級中的一部分了,他會被所指定的布局所替換,而被指定布局的id則是在ViewStub的屬性中通過android:inflatedId指定的(並且這個id僅當指定布局顯示或者初始化完成後有效)
注意:ViewStub的一個缺點是,它不能夠初始化<merge/>標籤的布局檔案
Ps:最近好懶且忙,所以一直沒有更新東西。其實這篇文章半個月前都差不多翻譯好了,但是覺得貌似很簡單,就沒有發出來,但想了想之後今天還是重新整理了一下文字,最終發了出來,布局篇本來應該還有一個關於ListView最佳化的部分,但是感覺大家其實一直都有用到,就直接在這個簡單陳述一下他的思想就好了。ListView進行的最佳化主要在於getView時,布局的重用,以及使用ViewHolder儲存需要使用的控制項,避免每次使用時都要通過findViewById進行尋找,詳情我就不怎麼說了,大家如果感興趣,可以去官方地址看看: http://developer.android.com/training/improving-layouts/smooth-scrolling.html 。所以呢,布局篇就到這裡了,感謝大家的閱覽。
[Android 效能最佳化系列]布局篇之動態載入布局