【发布时间】:2020-05-04 05:59:27
【问题描述】:
最近我尝试了 Android Studio 看来我的应用程序无法正常工作,一段时间后停止工作! 这是分析器屏幕截图
我的问题是,如何检测内存泄漏? 当我按下转储头时,内存应用程序停止运行。
锐边是否代表内存泄漏?
【问题讨论】:
标签: android
最近我尝试了 Android Studio 看来我的应用程序无法正常工作,一段时间后停止工作! 这是分析器屏幕截图
我的问题是,如何检测内存泄漏? 当我按下转储头时,内存应用程序停止运行。
锐边是否代表内存泄漏?
【问题讨论】:
标签: android
锐边是否代表内存泄漏?
没有。这是相反的方式。您看到的锐利边缘是垃圾收集器从您的应用程序中回收内存的结果。如果发生内存泄漏,您的应用的内存使用量会随着时间的推移而增加。
但是,您的应用似乎正在创建大量对象。只要您的应用确实做了一些有用的事情(即不只是坐在那里等待用户输入),这就是正常的。
【讨论】:
在Android中检查内存泄漏有不同的方法
最著名的是LeakCanary by square
适用于 Android 和 Java 的内存泄漏检测库。
“一点点漏水就会沉没一艘大船。” - 本杰明富兰克林
在您的 build.gradle 中:
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.2'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.2'
}
在您的应用程序类中:
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);
// Normal app init code...
}
}
在您的 Manifest.xml 中
<application
android:name=".ExampleApplication"
...
>
【讨论】:
isInAnalyzerProcess编译中显示的错误
Android Studio 有一个方便的工具来检测内存泄漏。如果您怀疑应用中的一段代码可能会泄漏 Activity,您可以这样做。
第 1 步:在连接到您计算机的设备或模拟器上编译并运行调试版本。
第 2 步:转到可疑活动,然后返回上一个活动,这会将可疑活动从任务堆栈中弹出。如果您不知道该活动,只需玩一段时间即可。
当您第一次打开 Memory Profiler 时,您会看到应用内存使用和访问工具的详细时间线,以强制进行垃圾收集、捕获堆转储和记录内存分配。
现在按照内存分析器部分的 Android 开发人员指南中的以下步骤进行操作:
View the Java heap and memory allocations with Memory Profiler
【讨论】: