84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
认证高级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為轉換過後的文件)。