Android性能優(yōu)化方法和匯總情況情況方案設(shè)計(jì)設(shè)計(jì)_第1頁(yè)
Android性能優(yōu)化方法和匯總情況情況方案設(shè)計(jì)設(shè)計(jì)_第2頁(yè)
Android性能優(yōu)化方法和匯總情況情況方案設(shè)計(jì)設(shè)計(jì)_第3頁(yè)
Android性能優(yōu)化方法和匯總情況情況方案設(shè)計(jì)設(shè)計(jì)_第4頁(yè)
Android性能優(yōu)化方法和匯總情況情況方案設(shè)計(jì)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)用標(biāo)準(zhǔn)文案Android 性能優(yōu)化方法對(duì)于一些Android 項(xiàng)目,影響性能瓶頸的主要是 Android 自己內(nèi)存管理機(jī)制問題,目前手機(jī)廠商對(duì) RAM都比較吝嗇,對(duì)于軟件的流暢性來說 RAM對(duì)性能的影響十分敏感,除了優(yōu)化Dalvik 虛擬機(jī)的堆內(nèi)存分配外, 我們還可以強(qiáng)制定義自己軟件的對(duì)內(nèi)存大小, 我們使用Dalvik 提供的 類來設(shè)置最小堆內(nèi)存為例 :1. private final static intCWJ_HEAP_SIZE= 6*1024*1024;VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//設(shè)置最小heap內(nèi)存為6MB大小。當(dāng)然對(duì)于內(nèi)存吃緊來說還可以通過手動(dòng)干涉 GC去處理bitmap 設(shè)置圖片尺寸,避免 內(nèi)存溢出 OutOfMemoryError 的優(yōu)化方法★android 中用bitmap 時(shí)很容易內(nèi)存溢出,報(bào)如下錯(cuò)誤:bitmapsizeexceedsVMbudget精彩文檔實(shí)用標(biāo)準(zhǔn)文案●主要是加上這段:1.BitmapFactory.Optionsoptions=newBitmapFactory.Options();2.options.inSampleSize=2;eg1:(通過Uri取圖片)1.privateImageViewpreview;2.BitmapFactory.Optionsoptions=newBitmapFactory.Options();3.options.inSampleSize=2;//圖片寬高都為原來的二分之一,即圖片為原來的四分之一4.Bitmapbitmap=BitmapFactory.decodeStream(cr5..openInputStream(uri),null,options);6.preview.setImageBitmap(bitmap);以上代碼可以優(yōu)化內(nèi)存溢出,但它只是改變圖片大小,并不能徹底解決內(nèi)存溢出?!馿g2:(通過路徑去圖片)1.privateImageViewpreview;2.privateStringfileName="/sdcard/DCIM/Camera/2010-05-1416.01.44.jpg";3.BitmapFactory.Optionsoptions=newBitmapFactory.Options();4.options.inSampleSize=2;//圖片寬高都為原來的二分之一,即圖片為原來的四分之一5.Bitmapb=BitmapFactory.decodeFile(fileName,options);6.preview.setImageBitmap(b);7.filePath.setText(fileName);精彩文檔實(shí)用標(biāo)準(zhǔn)文案★Android 還有一些性能優(yōu)化的方法:●首先內(nèi)存方面,可以參考 Android 堆內(nèi)存也可自己定義大小 和優(yōu)化Dalvik 虛擬機(jī)的堆內(nèi)存分配●基礎(chǔ)類型上,因?yàn)?Java沒有實(shí)際的指針,在敏感運(yùn)算方面還是要借助 NDK來完成。這點(diǎn)比較有意思的是 Google 推出NDK可能是幫助游戲開發(fā)人員, 比如OpenGLES 的支持有明顯的改觀,本地代碼操作圖形界面是很必要的?!駡D形對(duì)象優(yōu)化,這里要說的是 Android 上的Bitmap 對(duì)象銷毀,可以借助 recycle()方法顯示讓GC回收一個(gè) Bitmap 對(duì)象,通常對(duì)一個(gè)不用的 Bitmap 可以使用下面的方式,如1. if(bitmapObject.isRecycled()== false)//如果沒有回收bitmapObject.recycle();●目前系統(tǒng)對(duì)動(dòng)畫支持比較弱智對(duì)于常規(guī)應(yīng)用的補(bǔ)間過渡效果可以,但是對(duì)于游戲而言一般的美工可能習(xí)慣了 GIF方式的統(tǒng)一處理,目前 Android 系統(tǒng)僅能預(yù)覽 GIF的第一幀,可以借助J2ME中通過線程和自己寫解析器的方式來讀取 GIF89格式的資源。精彩文檔實(shí)用標(biāo)準(zhǔn)文案●對(duì)于大多數(shù) Android 手機(jī)沒有過多的物理按鍵可能我們需要想象下了做好手勢(shì)識(shí)別GestureDetector 和重力感應(yīng)來實(shí)現(xiàn)操控。通常我們還要考慮誤操作問題的降噪處理。Android 堆內(nèi)存也可自己定義大小對(duì)于一些大型 Android 項(xiàng)目或游戲來說在算法處理上沒有問題外,影響性能瓶頸的主要是Android 自己內(nèi)存管理機(jī)制問題,目前手機(jī)廠商對(duì) RAM都比較吝嗇,對(duì)于軟件的流暢性來說RAM對(duì)性能的影響十分敏感,除了上次 Android 開發(fā)網(wǎng)提到的優(yōu)化 Dalvik 虛擬機(jī)的堆內(nèi)存分配外,我們還可以強(qiáng)制定義自己軟件的對(duì)內(nèi)存大小,我們使用 Dalvik 提供的 類來設(shè)置最小堆內(nèi)存為例 :1. private final static intCWJ_HEAP_SIZE= 6*1024*1024;VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);//設(shè)置最小heap內(nèi)存為6MB大小。當(dāng)然對(duì)于內(nèi)存吃緊來說還可以通過手動(dòng)干涉 GC去處理,我們將在下次提到具體應(yīng)用。優(yōu)化Dalvik 虛擬機(jī)的堆內(nèi)存分配精彩文檔實(shí)用標(biāo)準(zhǔn)文案對(duì)于Android 平臺(tái)來說,其托管層使用的 DalvikJavaVM 從目前的表現(xiàn)來看還有很多地方可以優(yōu)化處理,比如我們?cè)陂_發(fā)一些大型游戲或耗資源的應(yīng)用中可能考慮手動(dòng)干涉 GC處理,使用 類提供的 setTargetHeapUtilization 方法可以增強(qiáng)程序堆內(nèi)存的處理效率。當(dāng)然具體原理我們可以參考開源工程,這里我們僅說下使用方法: privatefinalstaticfloatTARGET_HEAP_UTILIZATION=0.75f; 在程序onCreate時(shí)就可以調(diào)用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。Android 布局的優(yōu)化方案匯總層級(jí)觀察器(HierarchyViewer) :AndroidSDKtools 目錄下提供一個(gè)觀察布局的工具,層級(jí)觀察器 (HierarchyViewer)。HierarchyViewer 工具是一個(gè)非常好的布局優(yōu)化工具, 同時(shí),你也可以通過它學(xué)習(xí)他人的布局。應(yīng)該說是一個(gè)非常實(shí)用的工具。上面寫有控件名稱和 id等信息,下方的圓形表示這個(gè)節(jié)點(diǎn)的渲染速度,從左至右分別為測(cè)量大小,布局和繪制。綠色最快,紅色最慢。右下角的數(shù)字為子節(jié)點(diǎn)在父節(jié)點(diǎn)中的索引,如果沒有子節(jié)點(diǎn)則為 0。點(diǎn)擊可以查看對(duì)應(yīng)控件預(yù)覽圖、該節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)(為 6則有5個(gè)子節(jié)點(diǎn))以及具體渲染時(shí)間。 雙擊可以打開控件圖。右側(cè)是樹形結(jié)構(gòu)的預(yù)覽、控件屬性和應(yīng)用界面的結(jié)構(gòu)預(yù)覽。點(diǎn)擊相應(yīng)的樹形圖中的控件可以在右側(cè)看到他在布局中的位置和屬精彩文檔實(shí)用標(biāo)準(zhǔn)文案性。工具欄有一系列的工具,保存為 png或者psd等工具。( )layoutopt 使用:創(chuàng)建好看的 Android 布局是個(gè)不小的挑戰(zhàn),當(dāng)你花了數(shù)小時(shí)調(diào)整好它們適應(yīng)多種設(shè)備后,你通常不想再重新調(diào)整, 但笨重的嵌套布局效率往往非常低下, 幸運(yùn)的是,在AndroidSDK中有一個(gè)工具可以幫助你優(yōu)化布局,以減少內(nèi)存消耗,提高應(yīng)用程序運(yùn)行性能。layoutoptimization優(yōu)化是需要一定技巧的, 性能良好的代碼固然重要, 但寫出優(yōu)秀代碼的成本往往也很高,你可能不會(huì)過早地貿(mào)然為那些只運(yùn)行一次或臨時(shí)功能代碼實(shí)施優(yōu)化, 如果你的應(yīng)用程序反應(yīng)遲鈍,并且賣得很貴,或使系統(tǒng)中的其它應(yīng)用程序變慢, 用戶一定會(huì)有所響應(yīng),你的應(yīng)用程序下載量將很可能受到影響。在開發(fā)期間盡早優(yōu)化你的布局是節(jié)省成本,提高性能的簡(jiǎn)單方法, AndroidSDK 帶來了一個(gè)工具,它可以自動(dòng)分析你的布局, 發(fā)現(xiàn)可能并不需要的布局元素, 以降低布局復(fù)雜度。第一步:準(zhǔn)備工作如果想使用 AndroidSDK 中提供的優(yōu)化工具,你需要在開發(fā)系統(tǒng)的命令行中工作,如果你不熟悉使用命令行工具,那么你得多下功夫?qū)W習(xí)了。我們強(qiáng)烈建議你將 Android 工具所在的路徑添加到操作系統(tǒng)的環(huán)境變量中,這樣就可以直接敲名字運(yùn)行相關(guān)的工具了, 否則每次都要在命令提示符后面輸入完整的文件路徑, 現(xiàn)精彩文檔實(shí)用標(biāo)準(zhǔn)文案在在AndroidSDK 中有兩個(gè)工具目錄:/tools 和/platform-tools ,本文主要使用位于 /tools目錄中的 layoutopt 工具,另外我想說的是, ADB工具位于/platform-tools 目錄下。運(yùn)行l(wèi)ayoutopt運(yùn)行l(wèi)ayoutopt 工具是相當(dāng)簡(jiǎn)單的,只需要跟上一個(gè)布局文件或布局文件所在目錄作為參數(shù),需要注意的是,這里你必須包括布局文件或目錄的完整路徑, 即使你當(dāng)前就位于這個(gè)目錄。我們來看一個(gè)簡(jiǎn)單的例子:D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutoptD:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xmlD:\d\tools\eclipse\article_ws\Nothing\res\layout\main.xmlD:\d\tools\eclipse\article_ws\Nothing\res\layout>注意,在上面的示例中, 包含了文件的完整路徑, 如果不指定完整路徑,不會(huì)輸出任何內(nèi)容,例如:D:\d\tools\eclipse\article_ws\Nothing\res\layout>layoutoptmain.xml D:\d\tools\eclipse\article_ws\Nothing\res\layout>因此,如果你看不任何東西,則很可能是文件未被解析,也就是說文件可能未被找到。使用layoutopt 輸出Layoutopt 的輸出結(jié)果只是建議,你可以有選擇地在你的應(yīng)用程序中采納這些建議,下面來看幾個(gè)使用 layoutopt 輸出建議的例子。無用的布局精彩文檔實(shí)用標(biāo)準(zhǔn)文案在布局設(shè)計(jì)期間,我們會(huì)頻繁地移動(dòng)各種組件,有些組件最終可能會(huì)不再使用,如:1.<?xmlversion="1.0"encoding="utf-8"?>2.3.<LinearLayoutxmlns:android="/apk/res/android"4.5.android:layout_width="match_parent"6.7.android:layout_height="match_parent"8.9.android:orientation="horizontal">10.11.<LinearLayoutandroid:id="@+id/linearLayout1"12.13.android:layout_height="wrap_content"14.15.android:layout_width="wrap_content"16.17.android:orientation="vertical">18.19.<TextViewandroid:id="@+id/textView1"20.21.android:layout_width="wrap_content"22.23.android:text="TextView"24.25.android:layout_height="wrap_content"></TextView>26.</LinearLayout></LinearLayout>工具將會(huì)很快告訴我們 LinearLayout 內(nèi)的LinearLayout 是多余的:11:17ThisLinearLayoutlayoutoritsLinearLayoutparentisuseless輸出結(jié)果每一行最前面的兩個(gè)數(shù)字表示建議的行號(hào)。精彩文檔實(shí)用標(biāo)準(zhǔn)文案根可以替換Layoutopt 的輸出有時(shí)是矛盾的,例如:1.<?xmlversion="1.0"encoding="utf-8"?>2.3.<FrameLayoutxmlns:android="/apk/res/android"4.5.android:layout_width="match_parent"6.7.android:layout_height="match_parent">8.9.<LinearLayoutandroid:id="@+id/linearLayout1"10.11.android:layout_height="wrap_content"12.13.android:layout_width="wrap_content"14.15.android:orientation="vertical">16.17.<TextViewandroid:id="@+id/textView1"18.19.android:layout_width="wrap_content"20.21.android:text="TextView"22.23.android:layout_height="wrap_content"></TextView>24.25.<TextViewandroid:text="TextView"26.android:id="@+id/textView2"29.android:layout_width="wrap_content"30.31.android:layout_height="wrap_content"></TextView>32.</LinearLayout></FrameLayout>精彩文檔實(shí)用標(biāo)準(zhǔn)文案這個(gè)布局將返回下面的輸出:5:22Theroot-level<FrameLayout/>canbereplacedwith<merge/>10:21ThisLinearLayoutlayoutoritsFrameLayoutparentisuseless第一行的建議雖然可行,但不是必需的,我們希望兩個(gè) TextView 垂直放置,因此LinearLayout 應(yīng)該保留,而第二行的建議則可以采納,可以刪除無用的 FrameLayout 。有趣的是,這個(gè)工具不是全能的,例如,在上面的例子中,如果我們給 FrameLayout添加一個(gè)背景屬性, 然后再運(yùn)行這個(gè)工具, 第一個(gè)建議當(dāng)然會(huì)消失, 但第二個(gè)建議仍然會(huì)顯示,工具知道我們不能通過合并控制背景,但檢查了 LinearLayout 后,它似乎就忘了我們還給FrameLayout 添加了一個(gè) LinearLayout 不能提供的屬性。太多的視圖每個(gè)視圖都會(huì)消耗內(nèi)存, 在一個(gè)布局中布置太多的視圖, 布局會(huì)占用過多的內(nèi)存, 假設(shè)一個(gè)布局包含超過 80個(gè)視圖,layoutopt 可能會(huì)給出下面這樣的建議:-1:-1Thislayouthastoomanyviews:83views,itshouldhave<=80! -1:-1Thislayouthastoomanyviews:82views,itshouldhave<=80! -1:-1Thislayouthastoomanyviews:81views,itshouldhave<=80!上面給出的建議是視圖數(shù)量不能超過 80,當(dāng)然最新的設(shè)備有可能能夠支持這么多視圖,但如果真的出現(xiàn)性能不佳的情況,最好采納這個(gè)建議。嵌套太多精彩文檔實(shí)用標(biāo)準(zhǔn)文案布局不應(yīng)該有太多的嵌套, layoutopt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論