search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

乾貨分享:Android應用性能評測調優

在智能手機App競爭越來越激烈的今天,Android App各項性能如CPU、內存消耗等都是我們在開發測試中需要關注的指標,如何將App打造得更加「優雅」是我們需要不斷追求探索的方向,下面我們從內存和流暢度兩個緯度來說說如何對Android App進行評測和調優。

一、內存

內存不是無限使用的,如果內存過大或泄漏會出現OOM(Out Of Memory)、UI不流暢等問題,因此內存也是一個稀缺資源,我們應該保證沒有內存泄漏且對不需要使用的內存及時釋放。一般內存測試或分析內存問題可以分為下面幾步:

編譯代碼

選定測試場景(來自於經驗&開發)

測試場景轉換成用例

跑起工具Run用例

結合代碼,分析,分析…

1. 內存測試通用的方法

測試分析內存有以下幾種方法:

DDMS(Heap&Allocation Tracker)

Heap查看堆的分配情況:

主要關注兩項數據:

1)Heap Size堆的大小,當資源增加,當前堆的空餘空間不夠時,系統會增加堆的大小。

2)Allocated堆中已分配的大小,這是應用程序實際佔用的內存大小,資源回收后,此項數據會變小。

註:如果進行反覆操作,或堆的大小一直增加,則有內存泄漏的隱患。

Allocation Tracker跟蹤內存分配情況:

MAT(Memory Analyzer)

Leak Suspects:內存泄露報告

Top Components:吃貨報告

Histogram:每個Class佔用內存

Dominator Tree:列出哪些對象佔用內存最多以及誰hold住這些對象

2. Android常見的內存問題

Android常見的內存問題有:

萬惡的Static通常見到在單例模式

下面就是一個例子,static變數佔用過大的內存比例(7.1M),這裡碰到該情況需要具體分析裡面數據是否都是需要常駐的,不要把很多不相干的變數設為static屬性。

多線程生命周期過長hold住本該釋放資源

這裡需要自己搜索代碼查看是哪裡一直hold住了資源導致沒有釋放。

大胖子Bitmap

圖上可以看到Bitmap佔用內存很大(5.7M),利用MAT來找到他的outgoing和incoming引用:

可以找到這塊內存的引用關係,然後找代碼。

在遇到圖片資源佔用過大的情況,建議:

1)及時的銷毀;

2)設置一定的採樣率;

3)巧妙的運用軟引用(SoftRefrence)。

Cursor

Cursor用完記得關掉,如果實在不確定Cursor是否關閉,可以在onDestroy中關了。

總的來說,沒有嚴格意義上泄露只是你hold太久。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦