Android – 内存泄漏,我做错了什么?

我有活动A,它通过意图启动活动B.活动A没有对活动B的引用,在我使用的应用程序单例中也没有对活动B的引用.

当我创建Activity B时,会创建数千个对象.没关系,这是一个包含大量图像的人口密集的ListView的活动.

但是,当我按下后退按钮并返回活动A时,只释放了几十个对象中的十几个.也为活动调用onDestroy().我正在使用DDMS查看堆信息,并且多次按“原因GC”强制它释放内存.

我已经对其他应用程序(也使用列表视图)进行了相同的测试,并且在按下后退按钮然后“导致GC”时会销毁100%的对象,所以它肯定不是错误.

有什么建议吗? :-)我已经阅读了android文档中有关泄漏上下文的内容,但这没有用,因为我没有引用其他地方被破坏的活动(或其中的任何内容).此外,我有许多其他活动以相同的方式工作,并且不会在销毁时释放所有内存.我一定错过了一些明显的东西?

编辑:我刚刚意识到我正在使用AsyncTasks,它引用了活动(或者作为arg传递到doInBackground()或者可以通过outerClass.this访问.即使在onPostExecute()之后,它们是否可以在线程池中闲置?

编辑:即使我在运行任何asynctasks之前回去它也会泄漏:-(

编辑:运行asynctasks之前没有泄漏,如果我删除了admob代码,但仍然在使用asynctasks的活动中泄漏..所以asynctask仍然是一个很好的候选人:-)

最佳答案 我相信ListView实现中存在一个错误.看看这个问题:
Android: AlertDialog causes a memory leak.

这是一个错误报告:http://code.google.com/p/android/issues/detail?id=12334.它被拒绝但我认为必须重新打开.

点赞