认证高级PHP讲师
傻瓜式 MAT (Memory Analyzer Tool), 更傻瓜式leakcanary
查看app介面卡頓的BlockCanary, 記憶體外洩偵測庫leakcannary, 還有MAT等
卡死退出的話還是要看Log是crash還是ANRcrash的話看backtrace來修復ANR的話主要就是把主線程裡執行較長的動作放到子線程裡去執行
ddms,看看函數執行的時間,traceview這個工具也行
樓主主要的問題是不知道都有什麼地方在主線程使用了耗時操作,如果是這樣,開啟StrictMode無疑可以幫你很快找到需要關注的代碼.StrictMode ,嚴苛模式,是Android 提供的一種運行時檢測機制,用於檢測程式碼運行時的一些不規範的操作,最常見的場景是用於發現主執行緒的IO 操作。 StrictMode 包含兩個維度的概念:Policy(策略): 是指StrictMode 對一些違規操作的發現策略,分為兩類:一類是針對一個具體的線程(ThreadPolicy),另一類是針對虛擬機器的所有物件(VMPolicy)。 Penalty(懲罰):指 StrictMode 發現違規操作後進行懲罰的方式,譬如繪製紅框、打印日誌、顯示對話框、殺掉進程等。 Android 在許多關鍵的程式碼路徑上都植入了 StrictMode, 譬如磁碟讀取、網路存取、系統進程啟動等。 StrictMode 會根據設定的策略進行檢查,如果某個程序在程式碼執行時出現了違規操作,那麼就會受到」懲罰」。 例如下面這段程式碼,如果有違規,就會在logcat列印違規操作的位置以及呼叫堆疊資訊。 android.app.Application的onCreate開啟StickMode:
public void onCreate() { if (DEVELOPER_MODE) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll().penaltyLog().build()); } super.onCreate(); }
1.客戶推薦LeakCanary,OOM可以自測不用等到測試提出bug自己就可以提前解決。 在 build.gradle 中加入引用,不同的編譯使用不同的引用:
dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3' }
在 Application 中:
public class ExampleApplication extends Application { @Override public void onCreate() { super.onCreate(); LeakCanary.install(this); } }
2.還可以使用Android Studio裡面的Dump Java Heap導出hprof文件,使用“hprof-conv xxxxx.hprof yyyyy.hprof”命令轉換即可在MAT中分析,(其中xxxxx.hprof為原始文件,yyyyy.hprof為轉換過後的文件)。
傻瓜式 MAT (Memory Analyzer Tool), 更傻瓜式leakcanary
查看app介面卡頓的BlockCanary, 記憶體外洩偵測庫leakcannary, 還有MAT等
卡死退出的話還是要看Log是crash還是ANR
crash的話看backtrace來修復
ANR的話主要就是把主線程裡執行較長的動作放到子線程裡去執行
ddms,看看函數執行的時間,traceview這個工具也行
樓主主要的問題是不知道都有什麼地方在主線程使用了耗時操作,如果是這樣,開啟StrictMode無疑可以幫你很快找到需要關注的代碼.
StrictMode ,嚴苛模式,是Android 提供的一種運行時檢測機制,用於檢測程式碼運行時的
一些不規範的操作,最常見的場景是用於發現主執行緒的IO 操作。
StrictMode 包含兩個維度的概念:
Policy(策略): 是指StrictMode 對一些違規操作的發現策略,分為兩類:一類是針對一
個具體的線程(ThreadPolicy),另一類是針對虛擬機器的所有物件(VMPolicy)。
Penalty(懲罰):指 StrictMode 發現違規操作後進行懲罰的方式,譬如繪製紅框、打
印日誌、顯示對話框、殺掉進程等。
Android 在許多關鍵的程式碼路徑上都植入了 StrictMode, 譬如磁碟讀取、網路存取、系統
進程啟動等。 StrictMode 會根據設定的策略進行檢查,如果某個程序在程式碼執行時出現了
違規操作,那麼就會受到」懲罰」。
例如下面這段程式碼,如果有違規,就會在logcat列印違規操作的位置以及呼叫堆疊資訊。
android.app.Application的onCreate開啟StickMode:
1.客戶推薦LeakCanary,OOM可以自測不用等到測試提出bug自己就可以提前解決。
在 build.gradle 中加入引用,不同的編譯使用不同的引用:
在 Application 中:
2.還可以使用Android Studio裡面的Dump Java Heap導出hprof文件,使用“hprof-conv xxxxx.hprof yyyyy.hprof”命令轉換即可在MAT中分析,(其中xxxxx.hprof為原始文件,yyyyy.hprof為轉換過後的文件)。