2019-08-23
布局優化在Android開(kāi)發時,如果創建的布局層次結構比較複雜(zá),View樹(shù)嵌套的層次比較深,會使頁面展現的事件比較長,導緻應用運行起來越來越慢(màn),所以需要進行布局優化。
1.include标簽共享布局:
将通用的布局抽取出來,獨立成一(yī)個XML文件,在需要用到的頁面中(zhōng)使用include标簽引入進來,減少代碼量,便于修改。
2.ViewStub标簽實現延遲加載:
ViewStub是一(yī)種不可視并且大(dà)小(xiǎo)爲0的視圖,可以延遲到運行時才填充布局資(zī)源。當ViewStub設置爲可見或者被inflate之後,會填充布局資(zī)源,ViewStub會被填充的視圖代替,和普通的視圖沒有區别。
ViewStub在需要顯示的時候才會進行視圖的填充,實現延遲加載的目的。
3.merge标簽減少布局層次:
當一(yī)個獨立的布局文件最外(wài)層是FrameLayout且這個布局不需要設置背景等屬性時或者當前布局是另外(wài)一(yī)個布局的子布局時,可以使用merge來減少布局的層次。
4.盡量使用CompoundDrawable:
在LinearLayout布局中(zhōng),如果存在相鄰的ImageView和TextView,可以使用compound drawable合二爲一(yī)成爲一(yī)個TextView,ImageView中(zhōng)的圖片變成TextVIew的drawableTop/drawableLeft/drawableRight/ddrawableBottom屬性,之間的間隔使用drawablePadding屬性來代替。
5.使用
Lint: Lint也可以用來檢查應用的布局是否存在可優化的地方,爲優化布局設置的規則如下(xià):
AndroidLintUseCompoundDrawables:盡量使用CompoundDrawable。 MergeRootFrame:使用merge标簽減少布局層次。 TooManyViews:單個布局中(zhōng)存在太多的View,默認情況下(xià),單個布局中(zhōng)View的個數最多隻能是80個,可以考慮使用CompoundDdrawables等來減少View的個數。 TooDeepLayout:避免過深的布局嵌套,默認情況下(xià),單個布局中(zhōng)最多層級是10,可以考慮使用RelativeLayout來減少布局的層次。 UselessParent:當一(yī)個布局不是一(yī)個SrcollView或者根布局,
隻有一(yī)個子View且沒有設置背景時可以将它移除掉,并将它的子View移動到它的父容器中(zhōng),得到更扁平的布局層次。
**NestedWeights:**android:layout_weight屬性會使得View控件被測量兩次,當一(yī)個LinearLayout擁有非0dp值的android:layout_weight屬性,這時如果将它嵌套在兩一(yī)個擁有非0dp的android:layout_weight的LinearLayout,這時測量的次數将呈指數級别增加。
UselessLeaf:一(yī)個布局如果沒有子View也沒有設置背景,通常可以移除它,可以得到更扁平和高效的布局層次。
InefficientWeight:當LinearLayout中(zhōng)隻有一(yī)個子View定義了android:layout_weight屬性,更高性能的做法是使用0dp的android:layout_height或者android:layout_weidth來替換它,這個子View就不需要測量它自身對應的大(dà)小(xiǎo)。
網絡優化
網絡優化可以節省網絡流量,節省電量,提高應用的響應。
1.避免DNS解析:
DNS是域名系統,根據應用請求所用的域名URL去(qù)網絡映射表中(zhōng)查找對應的IP地址,這個過程可能會需要上百毫秒的時間,可能會存在DNS劫持的危險。所有根據具體(tǐ)的業務需求,可以采用增加動态更新能力的IP方式,或者在IP方式訪問失敗時切換到域名訪問方式。
2.合并網絡請求:
對于網絡請求應該盡量減少請求的接口,能夠合并的網絡請求就盡量合并。
3.預先獲取數據:
預先獲取數據能夠将網絡請求集中(zhōng)在一(yī)次,其他時間段手機就可以切換到空閑狀态,避免經常性的喚醒和空閑,起到節省電量的作用。
4.避免輪詢:
輪詢是指客戶端每隔一(yī)段時間就向服務端主動發起的網絡請求,存在需要的數據就拉取,沒有就等待下(xià)一(yī)次輪詢。一(yī)般情況下(xià)能使用推送替換的盡量使用推送,避免使用Thread.sleep()函數循環等待,可以使用系統AlarmMananger實現定時輪詢。
5.優化重連機制:
盡量避免網絡請求失敗時,無限制循環重試連接,可以設定一(yī)個最大(dà)重連次數,超過次數限制之後結束重連,等一(yī)段時間後再嘗試連接。
6.離(lí)線緩存:
對于圖片,文件等數據,可以使用二級緩存策略,當緩存中(zhōng)有對應的圖片或者文件時,可以直接從緩存中(zhōng)讀取,不需要網絡請求,避免網絡延遲,節省流量。
7.壓縮數據大(dà)小(xiǎo):
對于客戶端來說,可以對發送給服務器的數據進行gzip壓縮,同時可以選用更優的數據傳輸格式來減少網絡上面傳輸的數據。
8.不同的網絡環境使用不同的超時策略:
可以通過監聽(tīng) ConnectivityMananger.CONNECTIVITY_ACTION的變化來獲取最新的網絡類型,動态調整網絡超時時間。
9.CDN的使用:
CDN,内容發布網絡,盡可能避免網絡上可能影響數據傳輸速度和穩定性的環節,實現更快,更穩定的數據傳輸,其中(zhōng)CDN加速能夠緩解電信核心網絡延遲帶來的影響。
責任編輯:中(zhōng)山網站建設
【網訊網絡】國家高新技術企業》十年專注軟件開(kāi)發,網站建設,網頁設計,APP開(kāi)發,小(xiǎo)程序,微信公衆号開(kāi)發,定制各類企業管理軟件(OA、CRM、ERP、訂單管理系統、進銷存管理軟件等)!
服務熱線:0760-88610046、13924923903,http://www.wansion.net
上一(yī)篇:全面剖析大(dà)型網站建設的相關問題
下(xià)一(yī)篇:網站制作js爲何會有'異步'問題
*請認真填寫需求,我(wǒ)們會在24小(xiǎo)時内與您取得聯系。