Android佈局優化 html
• 1、優化佈局層次結構 android
• 避免佈局嵌套,此外幾個嵌套的LinearLayout實例使用layout_weight參數會致使兩次測量,特別是重複的添加,好比ListView、GridView。避免layout_weight sql
• 一、檢查你的佈局 網絡
• 經過tools/hierarchyviewer.bat找到佈局性能瓶頸。 app
• 二、修改你的佈局 佈局
Measure: 0.598ms 性能
Layout: 0.110ms 優化
Draw: 2.146ms 線程
• 三、使用Lint檢查(幾個例子) xml
• LinearLayout保護一個imageview和textView可使用一個控件來實現。 textView屬性android:drawableLeft="@drawable/up「
• 如根標籤僅做爲跟佈局(無背景等),使用<merge>替代。在代碼中inflate一個以merge爲根元素的佈局文件時候,你須要指定一個ViewGroup 做爲其容器,而且要設置attachToRoot 爲true
• 刪除沒子控件、沒背景的佈局
• 若是一個layout只有子控件,沒有兄弟控件,而且不是一個ScrollView或者根節點,並且沒有設置背景,那麼咱們能夠移除這個父控件,直接把子控件提高爲父控件。
• 儘可能減小內嵌的層級,考慮使用更多平級的組件 RelativeLayout or GridLayout來提高佈局性能,默認最大的深度是10
• 2、複用佈局<include/>
• 建立可重用的layout組件
• 使用定義的組件<includelayout="@layout/titlebar"/>
• <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width=」match_parent」android:layout_height="wrap_content"android:background="@color/titlebar_bg"> <ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/gafricalogo" /> </FrameLayout>
• <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width=」match_parent」android:layout_height=」match_parent」android:background="@color/app_bg"android:gravity="center_horizontal"><includelayout="@layout/titlebar"/> <TextViewandroid:layout_width=」match_parent」android:layout_height="wrap_content"android:text="@string/hello" android:padding="10dp"/> </LinearLayout>
• <include android:id=」@+id/news_title」android:layout_width=」match_parent」 android:layout_height=」match_parent」layout=」@layout/title」/>
• 使用merge標籤減小無用的佈局
• <merge xmlns:android="http://schemas.android.com/apk/res/android">
•
• <Button
• android:layout_width="fill_parent"
• android:layout_height="wrap_content"
• android:text="@string/add"/>
•
• <Button
• android:layout_width="fill_parent"
• android:layout_height="wrap_content"
• android:text="@string/delete"/>
•
• </merge>
• 3、動態加載視圖
• 有時候咱們須要複雜的視圖且少用,咱們能夠按須要的時候裝載以便減小內存,提升體驗。原來咱們都是設置在佈局中,而後使用View.GONE屬性,可是好資源影響性能。ViewStub是一個輕量級的View,它一個看不見的,不佔佈局位置,佔用資源很是小的控件
• 定義ViewStub
<ViewStubandroid: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)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // or ViewimportPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
Inflate只能訪問一次,經過inflatedId找到佈局。
缺點:使用的佈局不支持 <merge/>
• 4、平滑滾動ListView
• 一、使用後臺線程操做IO/網絡/sql Access
• 二、爲了在listView中減小findView操做,把row設置成ViewHolder
static class ViewHolder {
TextView text;
TextView timestamp;
ImageView icon;
ProgressBar progress;
int position;
}