欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Android中View繪制優(yōu)化之一---- 優(yōu)化布局層次

系統(tǒng) 1913 0

本文原創(chuàng), 轉(zhuǎn)載請注明出處 http://blog.csdn.net/qinjuning

前言,竟然是翻譯,當(dāng)然得弄的有板有眼。 照著大作家格式來咯 , - - 。



譯序



最近一直在做鎖屏界面,之前也寫過關(guān)于鎖屏界面的一些簡單原理,未曾想自己真正去深入理解鎖屏?xí)r,才

發(fā)覺鎖屏框架 真是又大又復(fù)雜,主要體現(xiàn)在如下兩個(gè)方面:

1、界面的組成以及更新機(jī)制;

2、對電源管理的控制,在鎖屏界面會禁用系統(tǒng)的電源管理,自己接管屏幕亮度的控制。

當(dāng)然還有更多的邏輯細(xì)節(jié)處理,只能耐著性子去研究了。。

通過對本次鎖屏界面的處理,才發(fā)現(xiàn)自己對View繪制還是不熟透,很多東西也沒有去潛心研究,導(dǎo)致自己在

真正做 項(xiàng)目時(shí)候才手忙腳亂的。因此,借著這次機(jī)會,也把 Android 4.0 developer 這些先進(jìn)的知識(山人一直

沉浸在Android 2.2中) 給過了一下,真是妙處多多。

開頭: 為了避免歧義,先將Android “Layout”一次的意思進(jìn)行說明,主要有如下三個(gè)方面:

1、統(tǒng)稱,即如何擺放UI,UI呈現(xiàn)效果等;

2、布局文件 ,即/res/layout/xxx.xml ;

3、布局過程 ,Android繪制過程中的 layout過程;

4、一些布局控件,例如LinearLayout、FrameLayout等 ;



正文:


改善布局效率(Layout Performace)


本文翻譯地址: http://developer.android.com/training/improving-layouts/index.html


布局是Android應(yīng)用程序重要的一部分,它與用戶體驗(yàn)有著直接聯(lián)系。如果一個(gè)布局是糟糕的,它將產(chǎn)生一個(gè)

消耗內(nèi)存 與低效UI應(yīng)用程序。 Android SDK 及它包含的工具都能幫助你定位在布局過程中隱藏的問題,通過對

這些課程的學(xué)習(xí), 你能夠以很小的內(nèi)存代價(jià)去實(shí)現(xiàn)流暢的平滑界面。

課程如下:

1 、優(yōu)化布局層次

同樣地,一個(gè)復(fù)雜的網(wǎng)頁會延長加載時(shí)間,你的布局層次如果太復(fù)雜也能引發(fā)一些效率問題。本課程

告知你如何利用 SDK的工具去觀察你的布局以及發(fā)現(xiàn)布局過程的瓶頸問題。

2、使用<include />標(biāo)簽復(fù)用布局文件

如果應(yīng)用程序的UI在多處重復(fù)某些布局結(jié)構(gòu),本課程向你展示如何創(chuàng)建高效、可重用的布局結(jié)構(gòu), 然后

以合適的 UI布局文件包含它們。

3、按需加載View視圖

除了簡單地在另外的布局文件中包括一個(gè)布局組件,你可能想在需要的時(shí)候才將視圖顯現(xiàn)出來,有的時(shí)候

是在 Activity運(yùn)行之后。本課程告訴你如何改進(jìn)布局初始化行為---- 按需加載布局文件的某個(gè)視圖。

4、如何使ListView流暢滑動(dòng)

如果你構(gòu)建了一個(gè)ListView實(shí)例呈現(xiàn)那些包含復(fù)雜或者大容量數(shù)據(jù)的列表項(xiàng),這可能會影響ListView的流暢

滑動(dòng)。 本課程提供了一些如何讓滑動(dòng)過程更加流暢的建議。

譯一 :


優(yōu)化布局層次


本文地址: http://developer.android.com/training/improving-layouts/optimizing-layout.html

一個(gè)通常的錯(cuò)誤觀念就是使用基本的布局結(jié)構(gòu)(例如:LinearLayout、FrameLayout等)能夠在大多數(shù)情況下

產(chǎn)生 高效率 的布局。顯然,你的應(yīng)用程序里添加的每一個(gè)控件和每一個(gè)布局都需要初始化、布局(layout)、

繪制 (drawing)。舉例來說: 嵌入一個(gè)LinearLayout會產(chǎn)生一個(gè)太深的布局層次。更嚴(yán)重的是,嵌入幾個(gè)使

用layout_weight屬性的LinearLayout 將會導(dǎo)致大量的開銷,因?yàn)槊總€(gè)子視圖都需要被測量兩次。這是反復(fù)解析

布局文件時(shí)重要的一點(diǎn),例如在ListView或者 GridView中使用時(shí)。


觀察你的布局

A ndroid SDK 工具箱包括一個(gè)稱作“ Hierarchy Viewer ”的工具,它允許你去在你的應(yīng)用程序運(yùn)行時(shí)分析

布局。 通過使用這個(gè)工具,能幫助你發(fā)現(xiàn)你的布局效率上的瓶頸問題。

Hierarchy Viewer ”工具允許你在已連接的設(shè)備或模擬器中選擇正在運(yùn)行的進(jìn)程,然后呈現(xiàn)出布局層次樹

(layout tree)。 每個(gè)正方塊下的交通燈(見下圖) --- 紅綠藍(lán)表現(xiàn)出了在測量(measure)、布局(layout)、以及繪制

(draw)過程中的效率值,這能 幫助你定位潛在的問題。

假設(shè)ListView 中的一項(xiàng)Item 存在如下(見圖 1)布局 :


圖1 :ListView某項(xiàng)Item的布局效果圖


Hierarchy Viewer 工具可以在 <sdk>/tools路徑下找到。當(dāng)打開它時(shí),“ Hierarchy Viewer ”工具顯示了

所有可用的 設(shè)備以及運(yùn)行在這些設(shè)備上的進(jìn)程。點(diǎn)擊”Load View Hierarchy”來顯示某個(gè)你選擇的組件的UI布局

層次。舉例來說,圖2 展現(xiàn)了圖1的布局層次樹。


Android中View繪制優(yōu)化之一---- 優(yōu)化布局層次

圖2:使用LinearLayout的布局樹


在圖2中,你可以直觀看到這個(gè)三層的布局結(jié)構(gòu)是存在一些問題的。點(diǎn)擊項(xiàng)體現(xiàn)出了在每個(gè)測量(measure)、

布局(layout)、 以及繪制(draw)過程中的時(shí)間消耗(見圖3)。很明顯,該項(xiàng)(LinearLayout)花費(fèi)了最長的時(shí)間去

測量、布局、繪制,你應(yīng)該 花點(diǎn)精力去優(yōu)化它們。


Android中View繪制優(yōu)化之一---- 優(yōu)化布局層次

圖3: 某個(gè)LinearLayout的繪制時(shí)間


完成該布局文件渲染的時(shí)間分別為:

測量過程:0.977ms

布局過程:0.167ms

繪制過程:2.717ms

修改布局文件

由于上圖中布局效率的低下是因?yàn)橐粋€(gè)內(nèi)嵌的LinearLayout控件,通過 扁平化布局文件 ----讓布局變得

更淺更寬, 而不是變得更窄更深層次 ,這樣就能提升效率了。 一個(gè)RelativeLayout作為根節(jié)點(diǎn)也能提供如上

的布局效果(即圖1)。 因此, 使用RelativeLayout改變布局的設(shè)計(jì),你可以看到現(xiàn)在我們的布局層次只有2層了。

新的布局層次樹如下:


Android中View繪制優(yōu)化之一---- 優(yōu)化布局層次

圖4:使用RelativeLayout的布局樹

現(xiàn)在,完成該布局文件渲染的時(shí)間分別為:

測量過程:0.977ms

布局過程:0.167ms

繪制過程:2.717ms

也許它只是一點(diǎn)點(diǎn)微小的改進(jìn),但這次它會被多次調(diào)用,因?yàn)槭荓istView會布局所有的Item,累積起來,

改進(jìn)后效果 還是非??捎^地。


大部分的時(shí)間差異是由于使用了帶有l(wèi)ayout_weight屬性的LinearLayout,它能減緩測量過程的速度。這僅僅

是一個(gè)例子, 即每個(gè)布局都應(yīng)該合適地被使用以及你應(yīng)該認(rèn)真考慮是否有必要采用“l(fā)ayout_weight" 屬性。

使用Lint工具 ( 譯者注: ADT插件更新到最新的16.0后 的工具 )

關(guān)于Lint的使用更多請看: Android Lint(官方代碼優(yōu)化利器)

一個(gè)好的實(shí)踐就是在你的布局文件中使用Lint工具去尋求可能優(yōu)化布局層次的方法。Lint已經(jīng)取代了Layoutopt

工具并且它提供了更強(qiáng)大的功能。一些Lint 規(guī)則 如下:


1、使用組合控件 --- 包含了一個(gè)ImageView以及一個(gè)TextView控件的LinearLayout如果能夠作為一個(gè)

組合控件將會 被更有效的處理。

關(guān)于這點(diǎn),更多請看 http://stackoverflow.com/questions/8318765/how-do-i-use-a-compound-drawable-instead-of-a-linearlayout-that-contains-an-imag

2、合并作為根節(jié)點(diǎn)的幀布局(Framelayout) ---- 如果一個(gè)幀布局時(shí)布局文件中的根節(jié)點(diǎn),而且它沒有背景圖片

或者padding 等,更有效的方式是使用<merge />標(biāo)簽替換該< Framelayout />標(biāo)簽 。


關(guān)于這點(diǎn),更多請看 : <<android merge之布局>>

<<Android里merge和include標(biāo)簽的使用>>

3、無用的葉子節(jié)點(diǎn)----- 通常來說如果一個(gè)布局控件沒有子視圖或者背景圖片,那么該布局控件時(shí)可以被移除

(由于它處于 invisible狀態(tài))。

4、無用的父節(jié)點(diǎn) ----- 如果一個(gè)父視圖即有子視圖,但沒有兄弟視圖節(jié)點(diǎn),該視圖不是ScrollView控件或者

根節(jié)點(diǎn),并且它 沒有背景圖片,也是可以被移除的,移除之后,該父視圖的所有子視圖都直接遷移至之前父視圖

的布局層次。同樣能夠使 解析布局以及布局層次更有效。

5、過深的布局層次 ---- 內(nèi)嵌過多的布局總是低效率地。考慮使用一些扁平的布局控件,例如 RelativeLayout、

GridLayout,來改善布局過程 。默認(rèn)最大的布局深度為10 。

當(dāng)使用Eclipse環(huán)境開發(fā)時(shí),Lint能夠自動(dòng)解決一些問題,提供一些建議以及直接跳轉(zhuǎn)到出錯(cuò)的代碼中去核查。

如果你沒有 使用Eclipse,Lint也可以通過命令行的方式運(yùn)行。更多關(guān)于Lint的可用信息請參看:《 Android Lint

Hi ~~~



Android中View繪制優(yōu)化之一---- 優(yōu)化布局層次


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩一级a毛片欧美一级 | 黑人操亚洲人 | 久久夏同学国产免费观看 | 免费看一区二区三区 | 久久久免费电影 | 91久久| 看一天影院宅急看在线观看 | 丁香成人影院 | 亚洲一区免费在线 | 全免费午夜一级毛片一级毛 | av网站免费观看 | 成 人 a v天堂| 中文字幕一区在线观看视频 | 国产欧美精品一区二区三区 | 成人免费看黄网站yyy456 | www久久av| 综合色久 | 国产日韩一区二区 | 97福利社 | 人人九九精品 | 看免费的毛片 | 久久中文字幕美谷朱里 | 亚洲欧美综合久久 | 国产一区二区三区久久久久久久久 | 国产精品亚洲第一区二区三区 | 99精品视频在线视频免费观看 | 精久久久 | 亚洲精品99 | 欧美精品在线视频观看 | 九九99九九在线精品视频 | 亚洲一区二区三区免费观看 | 亚洲国产精品一区 | 美女视频黄在线观看 | 日韩大片免费看 | 亚洲国产成人va在线观看网址 | 欧美一级一级 | 97精品国产91久久久久久 | 精品久久免费视频 | 色香首页 | 日韩a在线| 亚洲高清在线看 |