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