溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何優(yōu)化Android性能

發(fā)布時(shí)間:2021-06-29 14:26:30 來(lái)源:億速云 閱讀:130 作者:Leah 欄目:移動(dòng)開發(fā)

本篇文章給大家分享的是有關(guān)如何優(yōu)化Android性能,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

Android中的Java代碼會(huì)需要經(jīng)過(guò)編譯優(yōu)化再執(zhí)行的過(guò)程。代碼的不同寫法會(huì)影響到Java編譯器的優(yōu)化效率。例如for循環(huán)的不同寫法就會(huì)對(duì)編譯器優(yōu)化這段代碼產(chǎn)生不同的效率,當(dāng)程序中包含大量這種可優(yōu)化的代碼的時(shí)候,運(yùn)算性能就會(huì)出現(xiàn)問(wèn)題。想要知道如何優(yōu)化代碼的運(yùn)算性能就需要知道代碼在硬件層的執(zhí)行差異。
2)Slow Function Performance

如果你寫了一段代碼,它的執(zhí)行效率比想象中的要差很多。我們需要知道有哪些因素有可能影響到這段代碼的執(zhí)行效率。例如:比較兩個(gè)float數(shù)值大小的執(zhí)行時(shí)間是int數(shù)值的4倍左右。這是因?yàn)镃PU的運(yùn)算架構(gòu)導(dǎo)致的,如下圖所示:

如何優(yōu)化Android性能

雖然現(xiàn)代的CPU架構(gòu)得到了很大的提升,也許并不存在上面所示的那么大的差異,但是這個(gè)例子說(shuō)明了代碼寫法上的差異會(huì)對(duì)運(yùn)算性能產(chǎn)生很大的影響。

通常來(lái)說(shuō)有兩類運(yùn)行效率差的情況:第1種是相對(duì)執(zhí)行時(shí)間長(zhǎng)的方法,我們可以很輕松的找到這些方法并做一定的優(yōu)化。第2種是執(zhí)行時(shí)間短,但是執(zhí)行頻次很高的方法,因?yàn)閳?zhí)行次數(shù)多,累積效應(yīng)下就會(huì)對(duì)性能產(chǎn)生很大的影響。

修復(fù)這些細(xì)節(jié)效率問(wèn)題,需要使用Android SDK提供的工具,進(jìn)行仔細(xì)的測(cè)量,然后再進(jìn)行微調(diào)修復(fù)。
3)Traceview Walkthrough

通過(guò)Android Studio打開里面的Android Device Monitor,切換到DDMS窗口,點(diǎn)擊左邊欄上面想要跟蹤的進(jìn)程,再點(diǎn)擊上面的Start Method Tracing的按鈕,如下圖所示:

如何優(yōu)化Android性能

啟動(dòng)跟蹤之后,再操控app,做一些你想要跟蹤的事件,例如滑動(dòng)listview,點(diǎn)擊某些視圖進(jìn)入另外一個(gè)頁(yè)面等等。操作完之后,回到Android Device Monitor,再次點(diǎn)擊Method Tracing的按鈕停止跟蹤。此時(shí)工具會(huì)為剛才的操作生成TraceView的詳細(xì)視圖。

如何優(yōu)化Android性能

關(guān)于TraceView中詳細(xì)數(shù)據(jù)如何查看,這里不展開了,有很多文章介紹過(guò)。
4)Batching and Caching

為了提升運(yùn)算性能,這里介紹2個(gè)非常重要的技術(shù),Batching與Caching。

Batching是在真正執(zhí)行運(yùn)算操作之前對(duì)數(shù)據(jù)進(jìn)行批量預(yù)處理,例如你需要有這樣一個(gè)方法,它的作用是查找某個(gè)值是否存在與于一堆數(shù)據(jù)中。假設(shè)一個(gè)前提,我們會(huì)先對(duì)數(shù)據(jù)做排序,然后使用二分查找法來(lái)判斷值是否存在。我們先看***種情況,下圖中存在著多次重復(fù)的排序操作。

如何優(yōu)化Android性能

在上面的那種寫法下,如果數(shù)據(jù)的量級(jí)并不大的話,應(yīng)該還可以接受,可是如果數(shù)據(jù)集非常大,就會(huì)有嚴(yán)重的效率問(wèn)題。那么我們看下改進(jìn)的寫法,把排序的操作打包綁定只執(zhí)行一次:

上面就是Batching的一種示例:把重復(fù)的操作拎出來(lái),打包只執(zhí)行一次。

如何優(yōu)化Android性能

Caching的理念很容易理解,在很多方面都有體現(xiàn),下面舉一個(gè)for循環(huán)的例子:

如何優(yōu)化Android性能

上面這2種基礎(chǔ)技巧非常實(shí)用,積極恰當(dāng)?shù)氖褂媚軌蝻@著提升運(yùn)算性能。
5)Blocking the UI Thread

提升代碼的運(yùn)算效率是改善性能的一方面,讓代碼執(zhí)行在哪個(gè)線程也同樣很重要。我們都知道Android的Main Thread也是UI Thread,它需要承擔(dān)用戶的觸摸事件的反饋,界面視圖的渲染等操作。這就意味著,我們不能在Main Thread里面做任何非輕量級(jí)的操作,類似I/O操作會(huì)花費(fèi)大量時(shí)間,這很有可能會(huì)導(dǎo)致界面渲染發(fā)生丟幀的現(xiàn)象,甚至有可能導(dǎo)致ANR。防止這些問(wèn)題的解決辦法就是把那些可能有性能問(wèn)題的代碼移到非UI線程進(jìn)行操作。
6)Container Performance

另外一個(gè)我們需要注意的運(yùn)算性能問(wèn)題是基礎(chǔ)算法的合理選擇,例如冒泡排序與快速排序的性能差異:

如何優(yōu)化Android性能

避免我們重復(fù)造輪子,Java提供了很多現(xiàn)成的容器,例如Vector,ArrayList,LinkedList,HashMap等等,在Android里面還有新增加的SparseArray等,我們需要了解這些基礎(chǔ)容器的性能差異以及適用場(chǎng)景。這樣才能夠選擇合適的容器,達(dá)到***的性能。

如何優(yōu)化Android性能

以上就是如何優(yōu)化Android性能,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI