【问题标题】:Detect if we have memory leak in Android studio检测我们在 Android Studio 中是否存在内存泄漏
【发布时间】:2020-05-04 05:59:27
【问题描述】:

最近我尝试了 Android Studio 看来我的应用程序无法正常工作,一段时间后停止工作! 这是分析器屏幕截图

我的问题是,如何检测内存泄漏? 当我按下转储头时,内存应用程序停止运行。

锐边是否代表内存泄漏?

【问题讨论】:

标签: android


【解决方案1】:

锐边是否代表内存泄漏?

没有。这是相反的方式。您看到的锐利边缘是垃圾收集器从您的应用程序中回收内存的结果。如果发生内存泄漏,您的应用的内存使用量会随着时间的推移而增加。

但是,您的应用似乎正在创建大量对象。只要您的应用确实做了一些有用的事情(即不只是坐在那里等待用户输入),这就是正常的。

【讨论】:

  • 非常感谢。我实际上是在寻找您回复的内容。
【解决方案2】:

在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"
    ...
 >
 

【讨论】:

  • 我尝试了这个,但我无法处理它,因为我是android世界的新手
  • 您也必须在清单中将其注册为应用程序。它将作为在后台运行的单独应用程序安装。发生泄漏时,您将在状态栏上收到通知。
  • 无法解析方法isInAnalyzerProcess编译中显示的错误
【解决方案3】:

Android Studio 有一个方便的工具来检测内存泄漏。如果您怀疑应用中的一段代码可能会泄漏 Activity,您可以这样做。

第 1 步:在连接到您计算机的设备或模拟器上编译并运行调试版本。

第 2 步:转到可疑活动,然后返回上一个活动,这会将可疑活动从任务堆栈中弹出。如果您不知道该活动,只需玩一段时间即可。

当您第一次打开 Memory Profiler 时,您会看到应用内存使用和访问工具的详细时间线,以强制进行垃圾收集、捕获堆转储和记录内存分配。

现在按照内存分析器部分的 Android 开发人员指南中的以下步骤进行操作:

View the Java heap and memory allocations with Memory Profiler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 2013-05-31
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多