【内存泄露】LeakCanary常见问题

Android SDK会导致泄漏吗?

是。在AOSP和制造商实现中,有许多已知的内存泄漏已经随着时间的推移得到了修复。当这样的泄漏发生时,您作为应用程序开发人员几乎无法修复它。出于这个原因,LeakCanary有一个内置的、需要识别的Android泄漏列表,称为“库泄漏”(请参见对泄漏进行分类).

如果你找到一个新的,请制造问题(选择AndroidSDK/Support库中的泄漏)并遵循以下步骤:

  1. 提供整个泄漏跟踪信息(包括元数据),并使用backticks(`)进行格式化。
  2. 阅读该版本Android的AOSP源代码,并试图找出发生这种情况的原因。通过切换GitHub镜像上的分支,您可以轻松地浏览SDK版本:Android/平台框架库.
  3. 检查它是否发生在最新版本的Android上,否则就会在修复时使用责备来查找。
  4. 如果它还在发生,建立一个简单的复制案例。
  5. 在.上提出一个问题b.android.com带着泄密痕迹和复写箱。

我怎么知道LeakCanary在跑?

您可以确认LeakCanary通过过滤logcat中的LeakCanary标记来正确启动:

$ adb logcat | grep LeakCanary

D/LeakCanary: Installing AppWatcher

如果你看不到Installing AppWatcher在日志中,检查您的依赖项(./gradlew app:dependencies确保LeakCanary在那里。

注意,LeakCanary在测试中被自动禁用

$ adb logcat | grep LeakCanary

D/LeakCanary: Installing AppWatcher
D/LeakCanary: JUnit detected in classpath, app is running tests => disabling heap dumping & analysis
D/LeakCanary: Updated LeakCanary.config: Config(dumpHeap=false)

LeakCanary在哪里存储堆转储?

默认行为是将堆转储存储在leakcanary文件夹下的应用程序目录。如果应用程序已被授予android.permission.WRITE_EXTERNAL_STORAGE权限,则堆转储将存储在leakcanary-com.example文件夹(其中com.example是您的应用程序包名)在Download外部存储的文件夹。如果应用程序未被授予android.permission.WRITE_EXTERNAL_STORAGE允许,但该权限列在AndroidManifest.xml然后LeakCanary将显示一个通知,该通知可以被点击以授予许可。

我怎么才能发现泄漏?

有时,泄漏跟踪是不够的,您需要挖掘堆转储 MAT 或YourKit.

  • 转到堆分析屏幕,单击溢出菜单并选择共享堆转储.

下面是如何在堆转储中找到泄漏实例:

  1. 寻找所有实例leakcanary.KeyedWeakReference.
  2. 对于其中的每一个,请查看key场。
  3. 找到KeyedWeakReference有一个key字段等于LeakCanary报告的引用键。
  4. 这个referent那个领域KeyedWeakReference是泄露的东西。
  5. 从那时起,这件事就掌握在你的手中了。一个好的开端是查看GCRoot的最短路径(不包括弱引用)。

如何仅通过添加依赖项来安装LeakCanary?

在Android上,内容提供者是在创建Application实例之后,在调用Application.onCreate()之前创建的。这个leakcanary-object-watcher-android工件中定义了一个非导出的ContentProviderAndroidManifest.xml档案。安装该ContentProvider时,它会向应用程序添加活动和片段生命周期监听器。

LeakCanary添加了多少种方法?

0。LeakCanary是一个仅用于调试的库。

如何使用快照版本?

将依赖项更新为最新快照(请参阅build.gradle):

dependencies {
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5-SNAPSHOT'
}

添加Sonatype的snapshots储存库:

repositories {
  mavenCentral()
  maven {
    url 'https://oss.sonatype.org/content/repositories/snapshots/'
  }
}

https://travis-ci.org/github/square/leakcanary

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值