我已根据Google Developers page on that subject在应用上设置应用内结算v3。我几乎遵循TrivialDrive示例应用程序中的相同方法和步骤(例如,可以看作here)。
一切正常(查询库存,购买,物品消耗等工作)但我一直面临着一些相当烦人的内存泄漏。
如果我多次切换手机的方向,导致垃圾收集,执行HPROF转储并使用MAT进行分析,我可以看到一堆Threads
还活着和踢,虽然他们不应该。
它的记忆力不是很多,但它仍会累积在我使用Activity
的任何IabHelper
中......是的,我正处理我的IabHelper
实例(地狱,甚至将听众设置为null ...)在我的活动onDestroy()
中:
@Override
protected void onDestroy() {
super.onDestroy();
(...)
if (mHelper != null)
mHelper.dispose();
mHelper = null;
mGotInventoryListener = null;
mPurchaseFinishedListener = null;
}
有人有同样的问题吗?任何人都可以指出我正确的方向来解决这个问题吗?提前感谢任何意见。
答案 0 :(得分:2)
将我的头撞在墙上后,一遍又一遍地无效地看着我的代码,做了一些研究,我发现了这个问题:
Thread objects not garbage collected after being finished
显然,垃圾收集器没有收集这些线程的事实与内存泄漏无关,而是与我在debug
模式下运行应用程序的事实有关。在run
模式下运行应用程序(仍在Eclipse中)时,会发生线程垃圾收集。
此外:
"调试器和垃圾收集器目前是松散集成的。 VM保证调试器不知道的任何对象 收集垃圾,直到调试器断开连接。这个可以 调试器时,会导致对象随时间累积 连接的。例如,如果调试器看到一个正在运行的线程,那么 即使在之后,关联的Thread对象也不会被垃圾回收 线程终止。"
(http://developer.android.com/tools/debugging/index.html的底部, 正如@ptoinson所指出的那样)