【问题标题】:Memory Leak while Using IabHelper (In-App Billing v3)使用 IabHelper 时出现内存泄漏(应用内计费 v3)
【发布时间】:2014-09-22 20:13:08
【问题描述】:

我已根据Google Developers page on that subject 在应用上设置了应用内结算 v3。我几乎从他们的 TrivialDrive 示例应用程序中遵循相同的方法和步骤(可以看出,例如,here)。

一切正常(查询库存、购买、物品消耗等工作),但我一直面临一些相当烦人的内存泄漏。

如果我切换手机的方向几次,导致垃圾收集,进行 HPROF 转储并使用 MAT 进行分析,我可以看到一堆 Threads 仍然活着并且在踢,而他们不应该.

这不是很多内存,但它仍然会在我使用IabHelper 的任何Activity 中累积...是的,我正在处理我的IabHelper 实例(见鬼,甚至将侦听器设置为null.. .) 在我的活动onDestroy():

@Override
protected void onDestroy() {
     super.onDestroy();

     (...)

     if (mHelper != null) 
        mHelper.dispose();

     mHelper = null;
     mGotInventoryListener = null;
     mPurchaseFinishedListener = null;
 }

有人遇到同样的问题吗?谁能指出我正确的方向来解决这个问题?提前感谢您的任何意见。

【问题讨论】:

    标签: java android memory-leaks in-app-purchase


    【解决方案1】:

    在将我的头撞到墙上,一遍又一遍地查看我的代码并进行更多研究之后,我发现了这个问题:

    Thread objects not garbage collected after being finished

    显然,垃圾收集器未收集这些线程的事实与内存泄漏无关,而是与我在debug 模式下运行应用程序的事实有关。在run 模式下(仍在 Eclipse 中)运行应用程序时,会进行线程垃圾收集。

    此外:

    “调试器和垃圾收集器目前松散地集成在一起。 VM 保证调试器知道的任何对象都不是 在调试器断开连接之前收集垃圾。这个可以 在调试器运行时导致对象随着时间的推移而堆积 连接的。例如,如果调试器看到一个正在运行的线程, 关联的 Thread 对象即使在 线程终止。”

    (底部:http://developer.android.com/tools/debugging/index.html, 正如@ptoinson 所指出的)

    【讨论】:

      猜你喜欢
      • 2013-11-09
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      相关资源
      最近更新 更多