Android布局優化

jopen 10年前發布 | 26K 次閱讀 Android Android開發 移動開發

1.include減少多余通用布局,實現具體點擊可以抽成通用的!
<include 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/comm_title_height" 
    layout="@layout/titlebar_download" />

2)文件titlebar_download

<?xmlversion="1.0"encoding="utf-8"?>

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"> 

    <Button

        android:id="@+id/button"

        android:layout_width="match_parent"

        android:layout_height="@dimen/dp_40"

        android:layout_above="@+id/text"/> 

    <TextView

        android:id="@+id/text"

        android:layout_width="match_parent"

        android:layout_height="@dimen/dp_40"

        android:layout_alignParentBottom="true"

        android:text="@string/app_name"/>

</RelativeLayout>
2.<viewstub>標簽
</span>

3.<merge>標簽

4、減少不必要的infalte
(1) 對于inflate的布局可以直接緩存,用全部變量代替局部變量,避免下次需再次inflate
如上面ViewStub示例中的
if (networkErrorView != null) {
    networkErrorView.setVisibility(View.VISIBLE);
    return;
}
(2) ListView提供了item緩存,adapter getView的標準寫法,如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();
        ……
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder)convertView.getTag();
    }
}
private static class ViewHolder {
    ImageView appIcon;
    TextView  appName;
    TextView  appInfo;
}

4、其他點
(1) 用SurfaceView或TextureView代替普通View
SurfaceView或TextureView可以通過將繪圖操作移動到另一個單獨線程上提高性能。
普通View的繪制過程都是在主線程(UI線程)中完成,如果某些繪圖操作影響性能就不好優化了,這時我們可以考慮使用SurfaceView和TextureView,他們的繪圖操作發生在UI線程之外的另一個線程上。
因為SurfaceView在常規視圖系統之外,所以無法像常規試圖一樣移動、縮放或旋轉一個SurfaceView。TextureView是Android4.0引入的,除了與SurfaceView一樣在單獨線程繪制外,還可以像常規視圖一樣被改變。
(2) 使用RenderJavascript
RenderScript是Adnroid3.0引進的用來在Android上寫高性能代碼的一種語言,語法給予C語言的C99標準,他的結構是獨立的,所以不需要為不同的CPU或者GPU定制代碼代碼。
(3) 使用OpenGL繪圖
Android支持使用OpenGL API的高性能繪圖,這是Android可用的最高級的繪圖機制,在游戲類對性能要求較高的應用中得到廣泛使用。
Android 4.3最大的改變,就是支持OpenGL ES 3.0。相比2.0,3.0有更多的緩沖區對象、增加了新的著色語言、增加多紋理支持等,將為Android游戲帶來更出色的視覺體驗。
(4) 盡量為所有分辨率創建資源
減少不必要的硬件縮放,這會降低UI的繪制速度,可借助Android asset studio

5)layoutopt
layoutopt是一個可以提供layout及其層級優化提示的命令行,在sdk16以后已經被lint取代,在Windows->Show View->Other->Android->Lint Warnings查看lint優化提示</span>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!