84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
认证高级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为转换过后的文件)。