前言
一直在考慮APP的性能優化有沒有什麼簡單的工具或者方法,找了好久相關的文章,有很多講的是原了解析至于如何操作感覺不是很清晰,是以就在這上面花費了點時間,自己總結了下這兩種工具(LeakCanary,Blockcany),希望能節省初學者的時間,這兩種工具到底有什麼用?具體應該如何操作?
一,首先我們來感覺下LeakCanary:
oom 記憶體溢出并不隻是在大圖檔或者圖檔加載不做軟緩存的時候造成的問題。更深層次的問題就是,記憶體洩漏,該釋放的沒有釋放,一個Activity中引用的view view中引用的資源和bitamp,在activity銷毀的時候,與之相關聯的資源都會被釋放,但是如果其他線程正在運作并且持有這個Activity的引用,則會造成activity不會被釋放,這時候就造成記憶體洩漏,如果多次再打開此頁面,很容易造成oom如果A對象持有B對象的引用,當GC應當回收B的時候,發現A持有引用,則不會回收B對象。此時B就造成了記憶體洩漏
對于一個已經完成的項目,如果出現上面講述的問題,那我們該如何快速查找到這個問題的出處,并且直覺的呈現在我們面前?LeankCanary這個工具便可以幫到我們。
以下介紹LeakCanary在AndroidStudio中的使用
1、在Module:App的grable中配置如下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
導入依賴包leakcanary
2.在項目的Application的onCreate配置如下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
application中執行個體化
3.調用檢測
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
起始activity中調用
4.如果出現記憶體洩漏會出現如下圖檔
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
出現問題處
二,卡頓檢測—Blockcanary的使用
BlockCanary是一個Android平台的一個非侵入式的性能監控元件,應用隻需要實作一個抽象類,提供一些該元件需要的上下文環境,就可以在平時使用應用的時候檢測主線程上的各種卡慢問題,并通過元件提供的各種資訊分析出原因并進行修複。
操作步驟如下:
1.導入依賴包:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
依賴
2.在Application中使用:
public class DemoApplication extends Application {
@Override
public void onCreate() {
// 在主程序初始化調用哈
BlockCanary.install(this, new AppBlockCanaryContext()).start();
}
}
3.實作自己的監控上下文:
// 實作各種上下文,包括應用标示符,使用者uid,網絡類型,卡慢判斷阙值,Log儲存位置等例如下面:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
圖1
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
圖2
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
圖3
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
圖4
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI4U2YxIWYiBzN2ETZvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
圖5
本文參考了網上資料,總結了一下使用方法,友善更多使用者的使用。