久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用新版Android Studio檢測(cè)內(nèi)存泄露和性能

 深秋微涼3 2016-02-07

內(nèi)存泄露,,是Android開發(fā)者最頭疼的事,??赡芤惶幮⌒〉膬?nèi)存泄露,,都可能是毀于千里之堤的蟻穴。


怎么才能檢測(cè)內(nèi)存泄露呢,?網(wǎng)上教程非常多,,不過很多都是使用Eclipse檢測(cè)的, 其實(shí)1.3版本以后的Android Studio 檢測(cè)內(nèi)存非常方便, 如果結(jié)合上MAT工具,LeakCanary插件,一切就變得so easy了。


熟悉Android Studio界面


工欲善其事,必先利其器,。我們接下來先來熟悉下Android Studio的界面



一般分析內(nèi)存泄露, 首先運(yùn)行程序,打開日志控制臺(tái),有一個(gè)標(biāo)簽Memory ,我們可以在這個(gè)界面分析當(dāng)前程序使用的內(nèi)存情況, 一目了然, 我們?cè)僖膊恍枰嗫嗟脑趌ogcat中尋找內(nèi)存的日志了,。


圖中藍(lán)色區(qū)域,就是程序使用的內(nèi)存,, 灰色區(qū)域就是空閑內(nèi)存,,


當(dāng)然,Android內(nèi)存分配機(jī)制是對(duì)每個(gè)應(yīng)用程序逐步增加, 比如你程序當(dāng)前使用30M內(nèi)存, 系統(tǒng)可能會(huì)給你分配40M, 當(dāng)前就有10M空閑, 如果程序使用了50M了,系統(tǒng)會(huì)緊接著給當(dāng)前程序增加一部分,比如達(dá)到了80M,, 當(dāng)前你的空閑內(nèi)存就是30M了,。 當(dāng)然,系統(tǒng)如果不能再給你分配額外的內(nèi)存,程序自然就會(huì)OOM(內(nèi)存溢出)了。 每個(gè)應(yīng)用程序最高可以申請(qǐng)的內(nèi)存和手機(jī)密切相關(guān),,比如我當(dāng)前使用的華為Mate7,極限大概是200M,算比較高的了, 一般128M 就是極限了, 甚至有的手機(jī)只有可憐的16M或者32M,,這樣的手機(jī)相對(duì)于內(nèi)存溢出的概率非常大了。


我們?cè)趺礄z測(cè)內(nèi)存泄露呢


首先需要明白一個(gè)概念, 內(nèi)存泄露就是指,本應(yīng)該回收的內(nèi)存,還駐留在內(nèi)存中,。


一般情況下,高密度的手機(jī),一個(gè)頁(yè)面大概就會(huì)消耗20M內(nèi)存,如果發(fā)現(xiàn)退出界面,程序內(nèi)存遲遲不降低的話,可能就發(fā)生了嚴(yán)重的內(nèi)存泄露,。


我們可以反復(fù)進(jìn)入該界面,然后點(diǎn)擊dump java heap 這個(gè)按鈕,然后Android Studio就開始干活了,下面的圖就是正在dump



dump成功后會(huì)自動(dòng)打開 hprof文件,文件以Snapshot+時(shí)間來命名



通過Android Studio自帶的界面,查看內(nèi)存泄露還不是很智能,我們可以借助第三方工具,常見的工具就是MAT了,下載地址 http:///mat/downloads.php ,這里我們需要下載獨(dú)立版的MAT. 下圖是MAT一開始打開的界面, 這里需要提醒大家的是,,MAT并不會(huì)準(zhǔn)確地告訴我們哪里發(fā)生了內(nèi)存泄漏,,而是會(huì)提供一大堆的數(shù)據(jù)和線索,我們需要自己去分析這些數(shù)據(jù)來去判斷到底是不是真的發(fā)生了內(nèi)存泄漏,。



接下來我們需要用MAT打開內(nèi)存分析的文件, 上文給大家介紹了使用Android Studio生成了 hprof文件, 這個(gè)文件在呢, 在Android Studio中的Captrues這個(gè)目錄中,可以找到



注意,這個(gè)文件不能直接交給MAT, MAT是不識(shí)別的, 我們需要右鍵點(diǎn)擊這個(gè)文件,轉(zhuǎn)換成MAT識(shí)別的,。



然后用MAT打開導(dǎo)出的hprof(File->Open heap dump) MAT會(huì)幫我們分析內(nèi)存泄露的原因



LeakCanary


上面介紹了MAT檢測(cè)內(nèi)存泄露, 再給大家介紹LeakCanary。


項(xiàng)目地址:https://github.com/square/leakcanary


LeakCanary會(huì)檢測(cè)應(yīng)用的內(nèi)存回收情況,,如果發(fā)現(xiàn)有垃圾對(duì)象沒有被回收,,就會(huì)去分析當(dāng)前的內(nèi)存快照,也就是上邊MAT用到的.hprof文件,,找到對(duì)象的引用鏈,,并顯示在頁(yè)面上。這款插件的好處就是,可以在手機(jī)端直接查看內(nèi)存泄露的地方,可以輔助我們檢測(cè)內(nèi)存泄露



使用:


在build.gradle文件中添加,,不同的編譯使用不同的引用:


1
2
3
4
dependencies {
    debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
}


在應(yīng)用的Application onCreate方法中添加LeakCanary.install(this),,如下


1
2
3
4
5
6
7
public class ExampleApplication extends Application
    @Override
    public void onCreate() {
        super.onCreate();
        LeakCanary.install(this);
     }
 }


應(yīng)用運(yùn)行起來后,LeakCanary會(huì)自動(dòng)去分析當(dāng)前的內(nèi)存狀態(tài),,如果檢測(cè)到泄漏會(huì)發(fā)送到通知欄,,點(diǎn)擊通知欄就可以跳轉(zhuǎn)到具體的泄漏分析頁(yè)面。


Tips:就目前使用的結(jié)果來看,,絕大部分泄漏是由于使用單例模式hold住了Activity的引用,,比如傳入了context或者將Activity作為listener設(shè)置了進(jìn)去,所以在使用單例模式的時(shí)候要特別注意,,還有在Activity生命周期結(jié)束的時(shí)候?qū)⒁恍┳远x監(jiān)聽器的Activity引用置空,。


關(guān)于LeakCanary的更多分析可以看項(xiàng)目主頁(yè)的介紹,還有這里http://www./cn/posts/leak-canary-read-me/


追蹤內(nèi)存分配


如果我們想了解內(nèi)存分配更詳細(xì)的情況,可以使用Allocation Traker來查看內(nèi)存到底被什么占用了,。


用法很簡(jiǎn)單:



點(diǎn)一下是追蹤,, 再點(diǎn)一下是停止追蹤, 停止追蹤后 .alloc文件會(huì)自動(dòng)打開,打開后界面如下:




當(dāng)你想查看某個(gè)方法的源碼時(shí),右鍵選擇的方法,點(diǎn)擊Jump to source就可以了


查詢方法執(zhí)行的時(shí)間


Android Studio 功能越來越強(qiáng)大了, 我們可以借助AS觀測(cè)各種性能,如下圖:



如果我們要觀測(cè)方法執(zhí)行的時(shí)間,就需要來到CPU界面



點(diǎn)擊Start Method Tracking, 一段時(shí)間后再點(diǎn)擊一次, trace文件被自動(dòng)打開,



非獨(dú)占時(shí)間: 某函數(shù)占用的CPU時(shí)間,包含內(nèi)部調(diào)用其它函數(shù)的CPU時(shí)間,。


獨(dú)占時(shí)間: 某函數(shù)占用CPU時(shí)間,但不含內(nèi)部調(diào)用其它函數(shù)所占用的CPU時(shí)間,。


我們?nèi)绾闻袛嗫赡苡袉栴}的方法?


通過方法的調(diào)用次數(shù)和獨(dú)占時(shí)間來查看,,通常判斷方法是:


  1. 如果方法調(diào)用次數(shù)不多,,但每次調(diào)用卻需要花費(fèi)很長(zhǎng)的時(shí)間的函數(shù),可能會(huì)有問題,。

  2. 如果自身占用時(shí)間不長(zhǎng),,但調(diào)用卻非常頻繁的函數(shù)也可能會(huì)有問題。

綜述


上面給大家介紹了若干使用Android Studio檢查程序性能的工具,工具永遠(yuǎn)是輔助,不要因?yàn)楣ぞ叩⒄`太長(zhǎng)時(shí)間,。如果有問題,,歡迎大家糾正。



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多