【问题标题】:MainActivity leaked using leakcanaryMainActivity 使用leakcanary 泄露
【发布时间】:2017-07-16 19:23:16
【问题描述】:

我正在使用 Leak Canary 来跟踪内存泄漏,它说以下内容被泄漏:

static hk.o 
references ht.a 
leaks MainActivity instance

hk.oht.a 是什么?我的 MainActivity 中没有它们。

【问题讨论】:

  • 我也有同样的问题,可能与 google play 服务库有关。
  • 那些类名被混淆了,可以是任何东西。在 Leaks 的菜单中有一个 Share Info 按钮,在这里发布整个输出。

标签: android memory-leaks leakcanary


【解决方案1】:

我找到了这个,罪魁祸首是 Google Ads。 您提到的类实际上来自库com.google.ads.interactivemedia.v3:interactivemedia,它包含在play-services-ads 中。

对活动的引用是通过PublisherAdView 的构造函数设置的,我在其中传递了活动上下文。可能您也在您的应用中使用了类似的广告视图。

作为一种解决方法,我现在将应用程序上下文传递给广告视图,这似乎解决了泄漏问题:

new PublisherAdView(getContext().getApplicationContext())

【讨论】:

    【解决方案2】:

    我认为这些是任何一个依赖项的专业保护(使用随机名称重命名类以防止逆向工程)。当应用程序中使用 Google 登录等相关内容时,我已经看到了这一点。

    Google 服务类通常是 Pro Guarded。

    我希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      这些类是第三方库类。您可以将 MainActivity 实例作为参数并传入哪个类的实例属于库。如果不需要传入 Activity,可以使用 ApplicationContext 作为参数。

      【讨论】:

        猜你喜欢
        • 2020-02-06
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多