Android嵌套線性佈局玩法坑解決方法
前言
嵌套線性佈局大傢應該都用的非常熟悉,畢竟這玩意理解起來也是真的簡單,而且如果熟悉的話這玩意開發起來的效率也是真的快,不用一下一下拖動。
但是這個玩意有個非常的問題,就是性能問題,而且人傢性能問題是指數級別增加的,怎麼回事呢,因為你如果一層一層的嵌套佈局的話,系統在繪制的時候就是指數級別的繪制次數,如果你隻是嵌套瞭倆層那都還能接受的玩,如果你一個界面控件很多,然後你又嵌套幾層線性佈局,那這個時候性能就十分低下瞭。
詳解
- 看下面的代碼,就是一個十分典型的線性嵌套佈局,用起來是很爽,無腦套,但是系統可不少受
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout> </FrameLayout>
為什麼會讓性能降低的怎麼嚴重呢?
結論是繪制次數太多,主要是線性佈局會造成這個問題,線性佈局會對子view進行二次測量甚至三次測量。
比如:
1.LinearLayout寬度為wrap_content,因此它將選擇子View的最大寬度為其最後的寬度
2.但是有個子View的寬度為match_parent,意思它將以LinearLayout的寬度為寬度,這就陷入死循環瞭
3.因此這時候, LinearLayout 就會先以0為強制寬度測量一下子View,並正常地測量剩下的其他子View,然後再用其他子View裡最寬的那個的寬度,二次測量這個match_parent的子 View,最終得出它的尺寸,並把這個寬度作為自己最終的寬度。
4.這是對單個子View的二次測量,如果有多個子View寫瞭match_parent ,那就需要對它們每一個都進行二次測量。
5.除此之外,如果在LinearLayout中使用瞭weight會導致測量3次甚至更多,重復測量在Android中是很常見的
所以我們的嵌套對性能影響是指數級別的,比如線性套線性套線性這種。
以上就是Android嵌套線性佈局玩法坑解決方法的詳細內容,更多關於Android 嵌套線性佈局的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Android移動應用開發指南之六種佈局詳解
- Android studio六大基本佈局詳解
- Androd 勇闖高階性能優化之佈局優化篇
- Android Fragment的具體使用方式詳解
- Android實現背景圖片輪播