【Android開發(fā)進階系列】Android性能分析專題

好文推薦——系列文:

1.? 背景:Android App優(yōu)化, 要怎么做?

2.? Android App優(yōu)化之性能分析工具

3.? Android App優(yōu)化之提升你的App啟動速度之理論基礎

4.? Android App優(yōu)化之提升你的App啟動速度之實例挑戰(zhàn)

5.? Android App優(yōu)化之Layout怎么擺

6.? Android App優(yōu)化之ANR詳解

7.? Android App優(yōu)化之消除卡頓

8.? Android App優(yōu)化之內存優(yōu)化

9.? Android App優(yōu)化之持久電量

10.??Android App優(yōu)化之如何高效網(wǎng)絡請求

1 簡介

1.1 官方工具

??? 一般來說, 學習一門新的技術, 最應該做的就是閱讀其官方文檔, 那是最權威的威沫。Android本身給我們提供了很多App性能測試和分析工具, 而且大部分都集成到Android Studio或DDMS中, 非常方便使用京腥。

1.1.1 StrictMode

· 說明

????????顧名思義, "嚴格模式", 主要用來限制應用做一些不符合性能規(guī)范的事情. 一般用來檢測主線程中的耗?? 時操作和阻塞. 開啟StrictMode后, 如果線程中做一些諸如讀寫文件, 網(wǎng)絡訪問等操作, 將會在Log console輸出一些警告, 警告信息包含Stack Trace來顯示哪個地方出了問題.

· 文檔

????o?https://developer.android.com/reference/android/os/StrictMode.html

· 作用

????o 主要用來做主線程優(yōu)化分析

1.1.2 Systrace

· 說明

? ????Systrace是一個收集和檢測時間信息的工具,它能顯示CPU和時間被消耗在哪兒了,每個進程和線程都在其CPU時間片內做了什么事兒.而且會指示哪個地方出了問題,以及給出Fix建議.

? ????其以trace文件(html)的方式記錄.可以直接用Chrome瀏覽器打開查看.界面如下:

Systrace

· 文檔

????o?https://developer.android.com/studio/profile/systrace.html

????o?https://developer.android.com/studio/profile/systrace-walkthru.html

????o?https://developer.android.com/studio/profile/systrace-commandline.html?hl=fy

· 作用

????o 作用很多,個人主要用來分析UI的繪制時間,結合Hierarchy Viewer來提升UI性能.

????o 也可以用來發(fā)現(xiàn)耗時操作.

1.1.3 HierarchyViewer

· 說明

? ????Hierarchy Viewer提供了一個可視化的界面來觀測布局的層級,讓我們可以優(yōu)化布局層級,刪除多余的不必要的View層級,提升布局速度.

Hierarchy Viewer

????????有必要說明下的是:

????????上圖紅框標出的三個點是關鍵分析數(shù)據(jù). 左起依次代表View的Measure, Layout和Draw的性能. 另外顏色表示該View的該項時間指數(shù), 分為:

????* 綠色, 表示該View的此項性能比該View Tree中超過50%的View都要快.

????* 黃色, 表示該View的此項性能比該View Tree中超過50%的View都要慢.

????* 紅色, 表示該View的此項性能是View Tree中最慢的.


· 文檔

????o?https://developer.android.com/studio/profile/hierarchy-viewer.html

????o?https://developer.android.com/studio/profile/hierarchy-viewer-walkthru.html

????o?https://developer.android.com/studio/profile/hierarchy-viewer-setup.html

????o?https://developer.android.com/studio/profile/optimize-ui.html#HierarchyViewer

· 作用

????o 用來做View層級分析,可以分析出View Tree中的性能阻塞點,以便對癥下藥,提升布局性能.


??? ????Hierarchy Viewer需要Root的機器(產(chǎn)品機沒有開啟ViewServer)才可以執(zhí)行∪渌眩可以使用第三方的開源的ViewServer來協(xié)助我們在未Root的機器上使用Hierarchy Viewer分析.


1.1.4 TraceView——方法耗時分析

· 文檔

????o?https://developer.android.com/studio/profile/traceview.html

????o?https://developer.android.com/studio/profile/traceview-walkthru.html

· 作用

????o 分析方法調用棧以及其執(zhí)行時間,優(yōu)化方法執(zhí)行.

1.1.5 MemoryMonitor——內存監(jiān)控

· 說明

? ????內存使用檢測器轮蜕,可以實時檢測當前Application的內存使用和釋放等信息,并以圖形化界面展示昨悼。

Memory Monitor

· 文檔

????o?https://developer.android.com/studio/profile/am-memory.html

????o?https://developer.android.com/studio/profile/heap-viewer-walkthru.html

????o?https://developer.android.com/studio/profile/allocation-tracker-walkthru.html

· 作用

????o 用來做內存分析,內存泄露排查的不二之選.可以結合heap viewer, allocation tracker來分析.

????o 可以導出hprof文件結合第三方的MAT工具分析泄露點.

1.1.6 OtherMonitor

· 說明

? ????Android Studio的Monitor還提供了其他三個Motinor --- CPU, GPU,Network.

· 文檔

????o?https://developer.android.com/studio/profile/am-cpu.html

????o?https://developer.android.com/studio/profile/am-gpu.html

????o?https://developer.android.com/studio/profile/am-network.html

· 作用

????o 分別用來跟蹤監(jiān)測CPU,GPU和Network的使用極其變化,可以作為網(wǎng)絡優(yōu)化,流量優(yōu)化和渲染優(yōu)化等的一個指導. (個人并不常用到~)

1.1.7 其他

??? Android的開發(fā)者模式中也提供了較多的用來監(jiān)測性能的選項, 可以用下:

Developer options


1.2 第三方工具

???? 以下工具全部開源

1.2.1 Google的Battery Historian

· 說明

? ????Google出品, 通過Android系統(tǒng)的bug report文件來做電量使用分析的工具.

·? 文檔

????o?https://github.com/google/battery-historian

· 作用

????o 用來做電量使用分析.

1.2.2 網(wǎng)易的Emmagee

· 說明

????????針對Android App的CPU, 內存, 網(wǎng)絡, 電量等多項綜合的測試分析.

· 文檔

????o?https://github.com/NetEase/Emmagee

· 作用

????o 比官方工具更適合國人使用來做App的整體性能分析.

1.2.3 Square的leakcanary

· 說明

? ????Square出品, 必屬精品.類似于App探針的內存泄露監(jiān)測工具.

· 文檔

????o?https://github.com/square/leakcanary

· 作用

????o 集成到App中,用來做內存問題預防最好不過了.

1.2.4 AndroidDevMetrics

· 說明

????????一個library, 用來檢測Activity生命周期執(zhí)行性能, Dagger2注入性能以及幀率性能的工具.

· 文檔

????o?https://github.com/frogermcs/AndroidDevMetrics

· 作用

????o 如果你的應用使用的Dagger2,這個就比較必要了.

2 MemoryMonitor

(轉自)Android Studio Memory Monitor

http://blog.csdn.net/flyworkspace/article/details/54019812


2.1 使用方法

2.1.1 內存鏡像

????????生成內存鏡像,當從圖中發(fā)現(xiàn)內存使用較高時肠虽,點擊小卡車圖標幔戏,可以主動觸發(fā)GC。當應用內存使用很高税课,并且存在很嚴重的內存泄露時闲延,點擊該按鈕后的效果并不明顯,內存并沒有降低或者降低的很少韩玩。點擊"Dump Java Heap"圖標稍等片刻垒玲,會生成該應用的內存快照。如圖

????? Total Count:內存中該類對象個數(shù)找颓。

????? Heap Count:堆內存中該類對象個數(shù)合愈。

????? Sizeof:每個對象的大小(如果為0,則大小不固定)佛析。

????? Shallow size:對象本身占有內存大小益老。

????? Retained Size:釋放該對象后,節(jié)省的內存大小寸莫。

????????其中捺萌,Retained Size之所以比Shallowsize大的原因是,該對象釋放后膘茎,會引起其他對象的回收桃纯。 例如,某個對象被回收后: 該對象引用的其他對象也會被回收披坏, 該對象A被另一對象B強引用后态坦,之前對象B因為強引用該對象A而沒有被回收,現(xiàn)在該對象A被回收后棒拂,若對象B強引用的其他對象都已被回收伞梯,則對象B也會被回收。

????優(yōu)化內存:

????????點擊Class Name中的類名着茸,查看其所有實例(Instance)壮锻,分析實例中參數(shù)所占用的內存琐旁。根據(jù)Retaine Size排序涮阔,查找Instance中Depth較小的實例或者參數(shù),在代碼中找到相應的位置灰殴,查看內存占用是否合理敬特。

????判斷內存泄露的步驟:

????????從Total Count入手。該類的對象數(shù)量不對牺陶。

????? 很多對象只可能存在1個伟阔,若存在多個,則可能存在泄露掰伸。例如MainActivity的數(shù)量為2皱炉。又或者由于單例的使用不規(guī)范而導致創(chuàng)建多個“單例”對象。

????? 某個對象已經(jīng)不再使用狮鸭,而其還在內存中顯示合搅。例如LoginActivity已經(jīng)退出了,其數(shù)量為1歧蕉。

????????Memory Monitor只提供了內存信息灾部,如需詳細信息,可以通過android studio的Captures(View—–Tool window—–Captures)欄惯退,右鍵點擊快照文件赌髓,Export to standard .hprof將堆快照(Heap Snapshot)轉換成通用的hprof文件,之后可以通過其他內存分析工具打開,例如MAT锁蠕。

2.1.2 跟蹤內存分配(Allocation tracker)

????????點擊“Start Allocation Tracking”開始監(jiān)聽內存的分配情況夷野,再次點擊,監(jiān)聽完成荣倾,生成報告扫责。該報告顯示這段時間內,內存的分配情況逃呼。

2.1.3 小結

????????2.1是從內存的靜態(tài)信息中分析鳖孤,是某一個點的內存使用情況。2.2是跟蹤某一段時間內內存的分配情況抡笼,是個過程跟蹤苏揣。分析內存可以相結合,例如推姻,再進行某個操作前平匈,執(zhí)行2.1導出靜態(tài)內存信息,在開啟2.2開始跟蹤內存的分配藏古。當執(zhí)行完操作的時候增炭,關閉內存分配的跟蹤,再次執(zhí)行2.1的拧晕,導出操作某個流程后的靜態(tài)信息隙姿。將2.1的兩個靜態(tài)表結合2.2的內存分配動態(tài)過程一起分析。

2.2 分析樣例

2.2.1 占用內存分析樣例

????????打開某應用后厂捞,切換幾個頁面输玷,內存飛速上漲。這只是一個極端例子靡馁,有很多app欲鹏,隨著用的時間越長,內存也是一直在升高臭墨。

????????根據(jù)2.1的方法赔嚎,生成內存鏡像。

????????查找可疑的對象胧弛,這個過程是逐個分析的過程尤误,例如byte[]其實是其他對象的某個參數(shù),很多本質上都是byte[]叶圃,例如Bitmap中mBuffer也是byte[]袄膏,當內存中有很多Bitmap的時候,byte[]也會很高掺冠。所以byte[]不是我們重點關注對象沉馆,如果真的是因為Bitmap(或者其他類)多而造成的byte[]高码党,那么下面肯定會有該類也會占用很高內存斥黑。

????????繼續(xù)分析下一個HashMap$HashMapEntry揖盘。點擊它后,在Instance欄中锌奴,看到其實例很多兽狭,先從占用大的實例入手。

????????例如99=這個鹿蜀,點擊它后ReferenceTree顯示如下:

????????得知這個HashMap是ReuseThumbnail…類中ReuseThumbnailManager的REUSE_BITMAPS箕慧。在代碼中查看其大小是否合理。本例中REUSE_BITMAPS參數(shù)是static參數(shù)茴恰,其類型是HashMap颠焦,查看邏輯,看其是否正常往枣。

????????再看其他參數(shù)伐庭,逐個分析其內存占用是否正常。

????????分析內存是個逐步的過程分冈,一個問題解決后圾另,再次循環(huán)這些步驟。有時候雖然列表中顯示很多對象占用內存很高雕沉,有可能是同一個參數(shù)導致的集乔,所以一個問題解決后,有可能有一系列參數(shù)占用高的情況會消失蘑秽。就比如如果高內存bitmap的優(yōu)化后饺著,byte[]也很降低很多,其他參數(shù)也有可能會降低很多肠牲。

2.2.2 跟蹤內存分配分析樣例

????????3.1是從靜態(tài)內存信息中分析內存的使用,現(xiàn)在按照2.2從動態(tài)過程中跟蹤內存的分配靴跛。

????????生成報告如下:

????????查看Size最大的一個Thread.

????????可以看到調用過程缀雳,從NewDisplayRunnale(執(zhí)行了636次)調用了BitmapDecoder的decode方法(執(zhí)行了135次),從代碼中分析過程是否合理梢睛。

2.2.3 內存泄露分析樣例

????????對于android的內存泄露肥印,一般監(jiān)測Activity的泄露居多,例如LeakCanary默認也是監(jiān)測Activity是否泄露绝葡。

????????現(xiàn)寫一個demo深碱,故意造成內存泄露作為分析樣例。

public class MyActivity extends Activity{

???@Override

???public void onCreate(Bundle savedInstanceState) {

??????? super.onCreate(savedInstanceState);

??????? setContentView(R.layout.main);

??????? new TestThread().start();

???}


???class TestThread extends Thread{

??????? @Override

??????? public voidrun() {

???????????super.run();

??????????? try{

??????????????? Thread.sleep(10 * 60 * 1000);

??????????? }catch(InterruptedException e) {

??????????????? e.printStackTrace();

??????????? }

??????? }

???}

}

????????當進入MyActivity點擊回退藏畅,重復多次敷硅。按照2.1方法獲取內存鏡像。

????????看到MyActivity的實例數(shù)量為17個。在右邊的Analyzer Tasks欄中:

????????一般引起Activity泄露是由于其Context被強引用導致的绞蹦。

????????MyActivity的context參數(shù)被TestThread引用了力奋。所以在activity的銷毀的時候,由于TestThread還引用著MyActivity幽七,所以阻止了MyActivity被釋放景殷,因而導致內存泄露。

2.3 性能數(shù)據(jù)采集

3 DDMS

Android Studio中怎么使用DDMS工具澡屡?

http://www.cnblogs.com/gaobig/p/5029381.html


????????Android Studio開發(fā)工具中猿挚,打開DDMS,具體的方式如圖:

??? 打開之后的窗口如圖:

??? 查看進程中的線程:

??? 查看內存信息:

3.1? Traceview

Android學習之Android studio TraceView和lint工具的使用詳解

http://blog.csdn.net/qq_16131393/article/details/51172488

3.1.1 使用方法

??? 打開AndroidDevice Monitor驶鹉,這個大家都知道:

????1. 選擇你要調試的進程亭饵。

????2. 點擊start mothod profiling,待圖標變黑梁厉。

????3. 選擇sample base profiling


????這里需要解釋一下:

????Trace base profiling

????????整體監(jiān)聽辜羊,項目中所有方法都會監(jiān)聽,資源消耗比較大词顾。

????sample base profiling

????????抽樣監(jiān)聽八秃,以指定的頻率進行抽樣調查,一般不要超過5s肉盹,需要較長時間獲取準確的樣本數(shù)據(jù)昔驱。

????再次點擊start mothod profiling,就會生成檢測樣本上忍。

????效果如下:

????????上部分為時間軸骤肛,x軸表示時間,黑色區(qū)域可放大窍蓝,每個區(qū)域代表每個方法的執(zhí)行時間腋颠。y軸表示每一個獨立線程。

????????下部分Name為你所選擇的顏色區(qū)塊所代表的性能分析吓笙。不同的顏色淑玫,代表不同的方法,顏色長度代表占用時間面睛。

????????屬性介紹:

????Incl cpu time:某方法占用cpu時間(父+子)

????Excl cpu time:某方法本身占用cpu時間(父)

????Incl Real time:某方法真正執(zhí)行時間(父+子)

????Excl Real time:某方法自身執(zhí)行時間(父)

????????當然還有相應所占百分比絮蒿,不過多介紹。

????????還有Calls+RecurCall調用次數(shù)+遞歸調用次數(shù)

????????還有比較重要的:

????cpu time/call:平均每次調用占用cpu時間叁鉴。

????real time/call:平均每次調用所執(zhí)行的時間土涝。

????我覺得這個參數(shù)很具有參考性。

????????打開每個方法幌墓,會顯示Paents和children(即父方法和子方法)但壮,以及分別所占用時間冀泻。


· 說明

? ????一個圖形化的工具,用來展示和分析方法的執(zhí)行時間.

TraceView

3.1.2 數(shù)據(jù)采集


3.2 Heap Viewer

3.2.1 HeapViewer面板

??? ????按上圖的標記順序按下,我們就能看到內存的具體數(shù)據(jù)茵肃,右邊面板中數(shù)值會在每次GC時發(fā)生改變腔长,包括App自動觸發(fā)或者你來手動觸發(fā)。

3.2.2 詳情

??? 下面是每一個對象都有的列名含義:

??? ????當我們點擊某一行時验残,可以看到如下的柱狀圖:

????????橫坐標是對象的內存大小捞附,這些值隨著不同對象是不同的,縱坐標是在某個內存大小上的對象的數(shù)量您没。

3.2.3 HeapViewer的使用

??? ????我們說HeapViewer適合發(fā)現(xiàn)內存泄漏的問題鸟召,那你知道何為內存泄漏么?

????內存泄漏

????英文名:Memory Leaks

????標準解釋:無用的單純氨鹏,但是還是沒GC ROOT引用的內存

????通俗解釋:該死不死的內存

????檢測

????????那么如何檢測呢欧募?Heap Viewer中的數(shù)值會自動在每次發(fā)生GC時會自動更新,那么我們是等著他自己GC么仆抵?小弟不才跟继,剛開始我就是這么一直等啊等,由于GC的時機是系統(tǒng)把握的镣丑,所以很不好把握舔糖,既然我們是來看內存泄漏,那么我們在需要檢測內存泄漏的用例執(zhí)行過后莺匠,手動GC下金吗,然后觀察data object一欄的total size(也可以觀察HeapSize/Allocated內存的情況),看看內存是不是會回到一個穩(wěn)定值趣竣,多次操作后摇庙,只要內存是穩(wěn)定在某個值,那么說明沒有內存溢出的遥缕,如果發(fā)現(xiàn)內存在每次GC后卫袒,都在增長,不管是慢增長還是快速增長通砍,都說明有內存泄漏的可能性玛臂。

????實例

????先來看3個圖:

????1.剛打開首頁,手動GC一下:

????????2.首頁到詳情頁10遍,最后回到首頁封孙,手動GC一下,直到數(shù)值不再變化:

????????3.首頁到詳情頁10遍,最后回到首頁讽营,手動GC一下:

????????從data object一欄看到該類型的數(shù)值會在不斷增長虎忌,可能發(fā)生了內存泄漏,而我們也可以從上面三個圖的標紅部分來看橱鹏,Allocated分別增加了2.418M和1.084M膜蠢,而且你繼續(xù)這么操作下去堪藐,內存依然是增長的趨勢。

3.2.4 數(shù)據(jù)采集

4 Emmagee

4.1 使用說明

????1挑围、Emmagee是網(wǎng)易杭州研究院QA團隊開發(fā)的一個簡單易上手的Android性能監(jiān)測小工具礁竞,主要用于監(jiān)控單個App的CPU,內存杉辙,流量模捂,啟動耗時,電量蜘矢,電流等性能狀態(tài)的變化狂男,且用戶可自定義配置監(jiān)控的頻率以及性能的實時顯示,并最終生成一份性能統(tǒng)計文件品腹。

????2岖食、操作完成后,從系統(tǒng)任務列表中選擇Emmagee舞吭,并停止測試泡垃,在”storage\sdcard0”下找到命名類似”Emmagee_TestResult_20140403210532.csv”的文件,打卡即為監(jiān)控的得到的數(shù)據(jù)羡鸥。

????3蔑穴、將csv數(shù)據(jù)拷貝到excel中生成圖表,即可清晰看到整個操作過程中cpu兄春、內存等關鍵數(shù)據(jù)的變化澎剥。

Android性能測試小工具Emmagee - 敵測漏師

http://blog.csdn.net/anlegor/article/details/22895993

APP性能測試工具Emmagee的使用總結

http://blog.csdn.net/chenrushui/article/details/51589995

Android性能測試工具Emmagee

http://www.cnblogs.com/jytian/p/6516170.html


4.2 性能數(shù)據(jù)采集


5 leakcanary

· 說明

? ????Square出品, 必屬精品,類似于App探針的內存泄露監(jiān)測工具.

· 文檔

????o?https://github.com/square/leakcanary

· 作用

????o 集成到App中,用來做內存問題預防最好不過了.

5.1 使用說明

LeakCanary使用指南(1)

http://blog.csdn.net/hmh0512/article/details/57053265?utm_source=tuicool&utm_medium=referral


????快速集成

????????第一步:在build.gradle中添加如下依賴:

dependencies {

????debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'

????releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

????testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

}


????????第二步:在自己的Application(假設名為ExampleApplication)中添加如下代碼:

public class? ExampleApplication extends?Application {

????@Override?

? ??public void?onCreate()? {

? ??????super.onCreate();

? ??????if? (LeakCanary.isInAnalyzerProcess(this)) {

????????????// This process is dedicated to LeakCanary for heap analysis.

????????????// You should not init your app in this process.

? ??????????return;

????????}

????????LeakCanary.install(this);

????????// Normal app init code...

????}

}

????????到這里其實可以檢測到Activity的內存泄露了赶舆,原理后面再說哑姚。以Debug模式運行你的App,你可以看到芜茵,你App的圖標后面跟著一個Leaks圖標叙量,如下圖;而如果你以Release模式運行,則沒有這個圖標九串。

????測試使用

????????假裝你是測試人員绞佩,你開始各種點擊App,進行測試猪钮。然后你有幸看到這樣一個彈框品山,如下圖。

????????你很好奇烤低,然后點擊了彈框中間那個圖標肘交,于是手機屏幕的左上角出現(xiàn)了你App的圖標,再下拉點擊那個圖標扑馁,或者從桌面上LeakCanary圖標(跟在你App的圖標屁股后面那個)點進去涯呻,你看到下圖迈倍。點擊+號可以展開佩研,點擊-號收起郭计。

????????內存泄露往往發(fā)生在趟紊,生命周期較長的對象,直接或間接持有了生命周期較短的對象的強引用效诅,導致了生命周期較短的對象不能及時釋放胀滚。

????????上圖已經(jīng)夠傻瓜式了,第一行表示生命周期較長的那個對象填帽,圖中是AliPayModel這個類;第二行表示生命周期長的那個持有了一個什么樣的引用蛛淋,圖中是mActivity;第三行表示生命周期較短的那個對象,圖中是SelectPayTypeActivity篡腌。

????????回去查看源碼褐荷,發(fā)現(xiàn)AliPayModel是個單例,在SelectPayTypeActivity中以AliPayModel.getInstance(this).XXX()的方式調用單例中的XXX()方法嘹悼。于是AliPayModel通過mActivity持有了SelectPayTypeActivity.this的引用叛甫。SelectPayTypeActivity本來應該在用戶退出這個頁面和進入其他Activity(尤其是其他Activity層級較深時)時釋放掉,但是單例的生命周期貫穿整個App杨伙,AliPayModel一直引用著SelectPayTypeActivity其监,導致SelectPayTypeActivity不能及時釋放,引發(fā)內存泄露限匣。

public class? AliPayModel extends?BasePayModel {

? ??private?Activity? mActivity;

? ??private?AliPayModel() {}

? ??private static? AliPayModel instance = new?AliPayModel();

? ??public static?AliPayModel? getInstance(Activity tag) {

????????instance.mActivity = tag;

? ??????return?instance;

????}

}

????????找到了原因抖苦,解決方法也呼之欲出。要么AliPayModel這個業(yè)務類不要定義成單例米死,要么mActivity由強引用改成軟引用或者弱引用锌历。Java的強、軟峦筒、弱究西、虛四種引用的區(qū)別不在本文的討論范圍。

????發(fā)現(xiàn)開源組件中的內存泄露

????????用上述方法物喷,可以檢測出各種各樣的內存泄露卤材,包括:WebView導致的內存泄露、資源未關閉導致的內存泄露峦失、非靜態(tài)匿名內部類導致的內存泄露扇丛、Handler導致的內存泄露等等。

????????請看下圖尉辑,每次選擇圖片晕拆、上傳頭像時都會引發(fā)0.96M的內存泄露!

????????再按圖索驥,發(fā)現(xiàn)罪魁禍首是將一個Activity定義為static材蹬。表示不是很能理解這種神代碼实幕。最讓人心中萬馬奔騰的是,它竟然有2600多個star!在這個項目的Issues中很多人反映內存占用大堤器、容易OOM昆庇、卡頓等,但是沒有人從技術層面去查找和分析原因闸溃,更遑論去閱讀源碼整吆,都是直接拿來就用!


6 參考鏈接

Android App優(yōu)化之性能分析工具

http://www.reibang.com/p/da2a4bfcba68

Android開發(fā)調試必備-使用DDMS

http://blog.csdn.net/stzy00/article/details/46554529

Android內存分析工具(二):DDMS

http://blog.csdn.net/berber78/article/details/47784007

Android性能專項測試之Heap Viewer工具

http://blog.csdn.net/itfootball/article/details/48734553


正確使用Android性能分析工具——TraceView

http://android.jobbole.com/78995/

Android性能專項測試之MemoryMonitor工具

http://blog.csdn.net/itfootball/article/details/48712595

Android性能優(yōu)化第(二)篇---Memory Monitor檢測內存泄露

http://www.cnblogs.com/ldq2016/p/6628311.html


Android內存與性能

http://blog.kamidox.com/android-memory-guide.html


Android系統(tǒng)性能調優(yōu)工具介紹

http://blog.csdn.net/innost/article/details/9008691/


Android開發(fā)——Android多進程以及使用場景介紹

http://blog.csdn.net/seu_calvin/article/details/53932171


理解Android進程創(chuàng)建流程

http://gityuan.com/2016/03/26/app-process-create/


LeakCanary使用指南(1)

http://blog.csdn.net/hmh0512/article/details/57053265?utm_source=tuicool&utm_medium=referral


利用LeakCanary來檢查Android內存泄漏

http://www.reibang.com/p/0049e9b344b0


LeakCanary中文使用說明

https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辉川,隨后出現(xiàn)的幾起案子表蝙,更是在濱河造成了極大的恐慌,老刑警劉巖乓旗,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府蛇,死亡現(xiàn)場離奇詭異,居然都是意外死亡屿愚,警方通過查閱死者的電腦和手機汇跨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妆距,“玉大人穷遂,你說我怎么就攤上這事∮榫荩” “怎么了蚪黑?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長中剩。 經(jīng)常有香客問我忌穿,道長,這世上最難降的妖魔是什么咽安? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任伴网,我火速辦了婚禮,結果婚禮上妆棒,老公的妹妹穿的比我還像新娘澡腾。我一直安慰自己,他們只是感情好糕珊,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布动分。 她就那樣靜靜地躺著,像睡著了一般红选。 火紅的嫁衣襯著肌膚如雪澜公。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音坟乾,去河邊找鬼迹辐。 笑死,一個胖子當著我的面吹牛甚侣,可吹牛的內容都是我干的明吩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼殷费,長吁一口氣:“原來是場噩夢啊……” “哼印荔!你這毒婦竟也來了?” 一聲冷哼從身側響起详羡,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤仍律,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后实柠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體水泉,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年主到,在試婚紗的時候發(fā)現(xiàn)自己被綠了茶行。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片登钥。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡畔师,死狀恐怖,靈堂內的尸體忽然破棺而出牧牢,到底是詐尸還是另有隱情看锉,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布塔鳍,位于F島的核電站伯铣,受9級特大地震影響,放射性物質發(fā)生泄漏轮纫。R本人自食惡果不足惜腔寡,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掌唾。 院中可真熱鬧放前,春花似錦、人聲如沸糯彬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撩扒。三九已至似扔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炒辉。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工豪墅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辆脸。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓但校,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啡氢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容