2014-09-22 33 views
2

我已根据Google Developers page on that subject在应用上设置了应用内结算v3。我非常遵循TrivialDrive示例应用程序的相同方法和步骤(可以看到,例如,here)。这一切工作正常(查询库存,购买,物品消耗等工作),但我一直面临一些相当恼人的内存泄漏。使用IabHelper时的内存泄漏(应用内结算v3)

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

Android IabHelper causing Memory Leak?

这不是大量的内存,但它仍然在我用IabHelper任何Activity积累......是的,我在我的配置实例IabHelper(地狱,甚至成立了听众为空.. )在我的活动的onDestroy()

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

    (...) 

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

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

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

回答

2

撞我的头靠在墙上,徒劳地在我的代码找了一遍又一遍,并做一些进一步的研究之后,我发现这个问题:

Thread objects not garbage collected after being finished

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

此外:

“调试器和垃圾收集器正在松散集成 的VM保证任何对象调试器是知道的是没有收集到调试器断开这可以 结果后 垃圾。例如,如果调试器看到一个正在运行的线程,那么即使 线程终止后,关联的Thread对象也不会被垃圾收集。“

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