使用IabHelper时的内存泄漏(In-App Billing v3)

时间:2014-09-22 20:13:08

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

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

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

如果我多次切换手机的方向,导致垃圾收集,执行HPROF转储并使用MAT进行分析,我可以看到一堆Threads还活着和踢,虽然他们不应该。

Android IabHelper causing Memory Leak?

它的记忆力不是很多,但它仍会累积在我使用Activity的任何IabHelper中......是的,我正处理我的IabHelper实例(地狱,甚至将听众设置为null ...)在我的活动onDestroy()中:

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

     (...)

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

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

有人有同样的问题吗?任何人都可以指出我正确的方向来解决这个问题吗?提前感谢任何意见。

1 个答案:

答案 0 :(得分:2)

将我的头撞在墙上后,一遍又一遍地无效地看着我的代码,做了一些研究,我发现了这个问题:

Thread objects not garbage collected after being finished

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

此外:

  

"调试器和垃圾收集器目前是松散集成的。   VM保证调试器不知道的任何对象   收集垃圾,直到调试器断开连接。这个可以   调试器时,会导致对象随时间累积   连接的。例如,如果调试器看到一个正在运行的线程,那么   即使在之后,关联的Thread对象也不会被垃圾回收   线程终止。"

     

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