成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android SDK工具:使用layoutopt進(jìn)行布局優(yōu)化

原創(chuàng)
移動(dòng)開(kāi)發(fā) Android
優(yōu)化是需要一定技巧的,性能良好的代碼固然重要,但寫(xiě)出優(yōu)秀代碼的成本往往也很高。幸運(yùn)的是,在Android SDK中有一個(gè)工具可以幫助你優(yōu)化布局,以減少內(nèi)存消耗,提高應(yīng)用程序運(yùn)行性能。

【51CTO譯文】創(chuàng)建好看的Android布局是個(gè)不小的挑戰(zhàn),當(dāng)你花了數(shù)小時(shí)調(diào)整好它們適應(yīng)多種設(shè)備后,你通常不想再重新調(diào)整,但笨重的嵌套布局效率往往非常低下,幸運(yùn)的是,在Android SDK中有一個(gè)工具可以幫助你優(yōu)化布局,以減少內(nèi)存消耗,提高應(yīng)用程序運(yùn)行性能。

[[20490]] 
layoutoptimization

優(yōu)化是需要一定技巧的,性能良好的代碼固然重要,但寫(xiě)出優(yōu)秀代碼的成本往往也很高,你可能不會(huì)過(guò)早地貿(mào)然為那些只運(yùn)行一次或臨時(shí)功能代碼實(shí)施優(yōu)化,如果你的應(yīng)用程序反應(yīng)遲鈍,并且賣(mài)得很貴,或使系統(tǒng)中的其它應(yīng)用程序變慢,用戶(hù)一定會(huì)有所響應(yīng),你的應(yīng)用程序下載量將很可能受到影響。

在開(kāi)發(fā)期間盡早優(yōu)化你的布局是節(jié)省成本,提高性能的簡(jiǎn)單方法,Android SDK帶來(lái)了一個(gè)工具,它可以自動(dòng)分析你的布局,發(fā)現(xiàn)可能并不需要的布局元素,以降低布局復(fù)雜度。

***步:準(zhǔn)備工作

如果想使用Android SDK中提供的優(yōu)化工具,你需要在開(kāi)發(fā)系統(tǒng)的命令行中工作,如果你不熟悉使用命令行工具,那么你得多下功夫?qū)W習(xí)了。

我們強(qiáng)烈建議你將Android工具所在的路徑添加到操作系統(tǒng)的環(huán)境變量中,這樣就可以直接敲名字運(yùn)行相關(guān)的工具了,否則每次都要在命令提示符后面輸入完整的文件路徑,現(xiàn)在在Android SDK中有兩個(gè)工具目錄:/tools和/platform-tools,本文主要使用位于/tools目錄中的layoutopt工具,另外我想說(shuō)的是,ADB工具位于/platform-tools目錄下。

運(yùn)行l(wèi)ayoutopt

運(yùn)行l(wèi)ayoutopt工具是相當(dāng)簡(jiǎn)單的,只需要跟上一個(gè)布局文件或布局文件所在目錄作為參數(shù),需要注意的是,這里你必須包括布局文件或目錄的完整路徑,即使你當(dāng)前就位于這個(gè)目錄。我們來(lái)看一個(gè)簡(jiǎn)單的例子:
 

  1. D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutopt D:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xml  
  2. D:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xml  
  3. D:\d\tools\eclipse\article_ws\Nothing\res\layout> 

注意,在上面的示例中,包含了文件的完整路徑,如果不指定完整路徑,不會(huì)輸出任何內(nèi)容,例如:
 

  1. D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutopt main.xml  
  2. D:\d\tools\eclipse\article_ws\Nothing\res\layout> 

因此,如果你看不任何東西,則很可能是文件未被解析,也就是說(shuō)文件可能未被找到。

使用layoutopt輸出

Layoutopt的輸出結(jié)果只是建議,你可以有選擇地在你的應(yīng)用程序中采納這些建議,下面來(lái)看幾個(gè)使用layoutopt輸出建議的例子。

無(wú)用的布局

在布局設(shè)計(jì)期間,我們會(huì)頻繁地移動(dòng)各種組件,有些組件最終可能會(huì)不再使用,如:
 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout 
  3.     xmlns:android="http://schemas.android.com/apk/res/android" 
  4.     android:layout_width="match_parent" 
  5.     android:layout_height="match_parent" 
  6.     android:orientation="horizontal"> 
  7.     <LinearLayout 
  8.         android:id="@+id/linearLayout1" 
  9.         android:layout_height="wrap_content" 
  10.         android:layout_width="wrap_content" 
  11.         android:orientation="vertical"> 
  12.         <TextView 
  13.             android:id="@+id/textView1" 
  14.             android:layout_width="wrap_content" 
  15.             android:text="TextView" 
  16.             android:layout_height="wrap_content"></TextView> 
  17.     </LinearLayout> 
  18. </LinearLayout> 

工具將會(huì)很快告訴我們LinearLayout內(nèi)的LinearLayout是多余的:
 

  1. 11:17 This LinearLayout layout or its LinearLayout parent is useless  

輸出結(jié)果每一行最前面的兩個(gè)數(shù)字表示建議的行號(hào)。

根可以替換

Layoutopt的輸出有時(shí)是矛盾的,例如:
 

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <FrameLayout 
  3.     xmlns:android="http://schemas.android.com/apk/res/android" 
  4.     android:layout_width="match_parent" 
  5.     android:layout_height="match_parent"> 
  6.     <LinearLayout 
  7.         android:id="@+id/linearLayout1" 
  8.         android:layout_height="wrap_content" 
  9.         android:layout_width="wrap_content" 
  10.         android:orientation="vertical"> 
  11.         <TextView 
  12.             android:id="@+id/textView1" 
  13.             android:layout_width="wrap_content" 
  14.             android:text="TextView" 
  15.             android:layout_height="wrap_content"></TextView> 
  16.         <TextView 
  17.             android:text="TextView" 
  18.             android:id="@+id/textView2" 
  19.             android:layout_width="wrap_content" 
  20.             android:layout_height="wrap_content"></TextView> 
  21.     </LinearLayout> 
  22. </FrameLayout> 

這個(gè)布局將返回下面的輸出:
 

  1. 5:22 The root-level <FrameLayout/> can be replaced with <merge/> 
  2. 10:21 This LinearLayout layout or its FrameLayout parent is useless  

***行的建議雖然可行,但不是必需的,我們希望兩個(gè)TextView垂直放置,因此LinearLayout應(yīng)該保留,而第二行的建議則可以采納,可以刪除無(wú)用的FrameLayout。

有趣的是,這個(gè)工具不是全能的,例如,在上面的例子中,如果我們給FrameLayout添加一個(gè)背景屬性,然后再運(yùn)行這個(gè)工具,***個(gè)建議當(dāng)然會(huì)消失,但第二個(gè)建議仍然會(huì)顯示,工具知道我們不能通過(guò)合并控制背景,但檢查了LinearLayout后,它似乎就忘了我們還給FrameLayout添加了一個(gè)LinearLayout不能提供的屬性。

太多的視圖

每個(gè)視圖都會(huì)消耗內(nèi)存,在一個(gè)布局中布置太多的視圖,布局會(huì)占用過(guò)多的內(nèi)存,假設(shè)一個(gè)布局包含超過(guò)80個(gè)視圖,layoutopt可能會(huì)給出下面這樣的建議:
 

  1. -1:-1 This layout has too many views: 83 views, it should have <= 80!  
  2. -1:-1 This layout has too many views: 82 views, it should have <= 80!  
  3. -1:-1 This layout has too many views: 81 views, it should have <= 80!  

上面給出的建議是視圖數(shù)量不能超過(guò)80,當(dāng)然***的設(shè)備有可能能夠支持這么多視圖,但如果真的出現(xiàn)性能不佳的情況,***采納這個(gè)建議。

嵌套太多

布局不應(yīng)該有太多的嵌套,layoutopt(和Android團(tuán)隊(duì))建議布局保持在10級(jí)以?xún)?nèi),即使是***的平板電腦屏幕,布局也不應(yīng)該超過(guò)10級(jí),RelativeLayout可能是一個(gè)解決辦法,但它的用法更復(fù)雜,好在Eclipse中的Graphical Layout資源工具更新后,使得這一切變得更簡(jiǎn)單。

下面是布局嵌套太多時(shí),layoutopt的輸出內(nèi)容:
 

  1. -1:-1 This layout has too many nested layouts: 12 levels, it should have <= 10!  
  2. 305:318 This LinearLayout layout or its RelativeLayout parent is possibly useless  
  3. 307:314 This LinearLayout layout or its FrameLayout parent is possibly useless  
  4. 310:312 This LinearLayout layout or its LinearLayout parent is possibly useless  

嵌套布局警告通常伴隨有一些無(wú)用布局的警告,有助于找出哪些布局可以移除,避免屏幕布局全部重新設(shè)計(jì)。

小結(jié)

Layoutopt是一個(gè)快速易用的布局分析工具,找出低效和無(wú)用的布局,你要做的是判斷是否采納layoutopt給出的優(yōu)化建議,雖然采納建議作出修改不會(huì)立即大幅改善性能,但沒(méi)有理由需要復(fù)雜的布局拖慢整個(gè)應(yīng)用程序的速度,并且后期的維護(hù)難度也很大。簡(jiǎn)單布局不僅簡(jiǎn)化了開(kāi)發(fā)周期,還可以減少測(cè)試和維護(hù)工作量,因此,在應(yīng)用程序開(kāi)發(fā)期間,應(yīng)盡早優(yōu)化你的布局,不要等到***用戶(hù)反饋回來(lái)再做修改。

原文名:Android SDK Tools: Layout Optimization 作者:Shane Conder和Lauren Darcey  原文

【51CTO譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載,合作媒體轉(zhuǎn)載請(qǐng)注明原文出處、作者及51CTO譯稿和譯者!】

【編輯推薦】

  1. Android UI設(shè)計(jì)模板Dashboard及Action Bar的應(yīng)用
  2. Android UI自定義設(shè)計(jì)模板Dashboard
  3. Dashboard Android用戶(hù)自定義UI設(shè)計(jì)模板
  4. Android用戶(hù)界面設(shè)計(jì)模板Dashboard產(chǎn)品展示 
責(zé)任編輯:佚名 來(lái)源: 51CTO.com
相關(guān)推薦

2014-07-29 15:23:06

Android

2012-05-08 16:37:23

android

2012-04-19 16:22:12

TitaniumTabGroup

2010-09-09 16:36:36

DIV標(biāo)簽

2013-09-17 10:17:39

Android布局

2010-01-28 10:31:32

Android使用SD

2021-05-09 22:48:40

SQL數(shù)據(jù)庫(kù)變量

2011-09-14 16:33:04

2013-09-16 16:01:23

Android開(kāi)發(fā)代碼

2023-07-13 11:24:14

SQL優(yōu)化賦值

2013-10-10 13:36:03

Powershell恢復(fù)

2010-07-02 12:58:39

Meego開(kāi)發(fā)

2018-09-11 09:41:19

2016-09-22 09:24:33

AndroidViewStub

2021-08-05 11:30:49

Linux滲透測(cè)試

2009-08-05 10:08:55

MySQL查詢(xún)優(yōu)化調(diào)度鎖定

2009-04-16 17:44:46

性能優(yōu)化擴(kuò)展高性能

2023-08-30 11:03:47

Java工具

2011-05-16 11:29:10

Google EartAndroid

2011-02-15 13:45:43

Android 3.0
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产日产精品一区二区三区四区 | 91在线观看 | 久久久久国产一区二区三区四区 | 成人在线免费 | 成人中文字幕在线观看 | 日韩和的一区二区 | 国产黄色av网站 | 9久久 | 夜夜草天天草 | 国产精品免费一区二区三区四区 | 午夜三级视频 | 色久影院| 精品少妇一区二区三区日产乱码 | 91视频在线观看免费 | 精品国产一区二区久久 | 97中文视频 | 伊人二区 | av片在线观看 | 久久视频一区 | 久久久久久综合 | 天天色图 | 国产激情亚洲 | 欧美日韩久久久 | 久久国产精品-国产精品 | 天天夜天天操 | 欧美区日韩区 | 97av在线| 91免费视频观看 | 国产精品一区三区 | 成人精品视频在线观看 | 亚洲午夜精品视频 | 精品伦精品一区二区三区视频 | 欧美精品久久久久久久久老牛影院 | 一级毛片视频 | 亚洲成人在线网 | 久草视频观看 | 国产成人99久久亚洲综合精品 | 成人在线影视 | 国产1区在线| 亚洲欧美日韩精品久久亚洲区 | 久久尤物免费一区二区三区 |