前言
一直在考慮APP的性能優(yōu)化有沒有什么簡(jiǎn)單的工具或者方法铐料,找了好久相關(guān)的文章噪叙,有很多講的是原理解析至于如何操作感覺不是很清晰矮锈,所以就在這上面花費(fèi)了點(diǎn)時(shí)間,自己總結(jié)了下這兩種工具(LeakCanary睁蕾,Blockcany),希望能節(jié)省初學(xué)者的時(shí)間苞笨,這兩種工具到底有什么用?具體應(yīng)該如何操作子眶?
一瀑凝,首先我們來感覺下LeakCanary:
? ? ? ? oom 內(nèi)存溢出并不只是在大圖片或者圖片加載不做軟緩存的時(shí)候造成的問題。更深層次的問題就是臭杰,內(nèi)存泄漏粤咪,該釋放的沒有釋放,一個(gè)Activity中引用的view? view中引用的資源和bitamp渴杆,在activity銷毀的時(shí)候寥枝,與之相關(guān)聯(lián)的資源都會(huì)被釋放,但是如果其他線程正在運(yùn)行并且持有這個(gè)Activity的引用磁奖,則會(huì)造成activity不會(huì)被釋放脉顿,這時(shí)候就造成內(nèi)存泄漏,如果多次再打開此頁面点寥,很容易造成oom如果A對(duì)象持有B對(duì)象的引用艾疟,當(dāng)GC應(yīng)當(dāng)回收B的時(shí)候,發(fā)現(xiàn)A持有引用敢辩,則不會(huì)回收B對(duì)象蔽莱。此時(shí)B就造成了內(nèi)存泄漏
? ? ? ? 對(duì)于一個(gè)已經(jīng)完成的項(xiàng)目,如果出現(xiàn)上面講述的問題戚长,那我們?cè)撊绾慰焖俨檎业竭@個(gè)問題的出處盗冷,并且直觀的呈現(xiàn)在我們面前?LeankCanary這個(gè)工具便可以幫到我們同廉。
以下介紹LeakCanary在AndroidStudio中的使用
1仪糖、在Module:App的grable中配置如下
2.在項(xiàng)目的Application的onCreate配置如下
3.調(diào)用檢測(cè)
4.如果出現(xiàn)內(nèi)存泄漏會(huì)出現(xiàn)如下圖片
界面非常明了的告訴你,是那個(gè)對(duì)象造成的內(nèi)存泄漏迫肖。以此來做代碼修改锅劝。具體實(shí)現(xiàn)demo可參考:github.com/SOFTPOWER1991/leakcanarySample_androidStudio
二,卡頓檢測(cè)—Blockcanary的使用
BlockCanary是一個(gè)Android平臺(tái)的一個(gè)非侵入式的性能監(jiān)控組件蟆湖,應(yīng)用只需要實(shí)現(xiàn)一個(gè)抽象類故爵,提供一些該組件需要的上下文環(huán)境,就可以在平時(shí)使用應(yīng)用的時(shí)候檢測(cè)主線程上的各種卡慢問題隅津,并通過組件提供的各種信息分析出原因并進(jìn)行修復(fù)诬垂。
操作步驟如下:
1.導(dǎo)入依賴包:
2.在Application中使用:
public class DemoApplication extends Application {
@Override
public void onCreate() {
// 在主進(jìn)程初始化調(diào)用哈
BlockCanary.install(this, new AppBlockCanaryContext()).start();
}
}
3.實(shí)現(xiàn)自己的監(jiān)控上下文:
// 實(shí)現(xiàn)各種上下文劲室,包括應(yīng)用標(biāo)示符,用戶uid结窘,網(wǎng)絡(luò)類型很洋,卡慢判斷闕值,Log保存位置等例如下面:
具體可參考:github.com/markzhai/AndroidPerformanceMonitor/blob/master/README_CN.md
本文參考了網(wǎng)上資料隧枫,總結(jié)了一下使用方法喉磁,方便更多使用者的使用。
參考文檔:www.open-open.com/lib/view/open1453377370620.html
? ? ? ? ? ? ? ? ? ??blog.csdn.net/watermusicyes/article/details/46333925