2011-12-30 76 views
2

我开发了一个使用共享库的小应用程序。当我在设备中运行该应用程序时,堆内存正在迅速增加。我试图减少使用gc(),但这不适合我。有一次,我收到一条消息,如低内存不再有后台进程,我的应用程序退出。我怎么解决这个问题?在android中处理内存泄漏

+0

是否有其分配的内存/资源任何循环,创建一个类的新实例?请显示这样的循环代码 – sll 2011-12-30 12:46:28

+0

其实它是一个动态壁纸应用程序。在那里加载一个视频文件作为壁纸,为此,我在jni代码中使用ffmpeg编译该视频文件,并使用opengl绘制壁纸。在jni文件中使用av_malloc函数。 – Satheesh 2011-12-30 13:20:16

+0

任何循环? – sll 2011-12-30 14:18:40

回答

1

您不仅要使用GC,还要删除对不再需要的对象的引用 - GC将不会回收引用的对象。您还可以小心翼翼地使用JNI库,并在分配启动线程的内存时采取必要的预防措施。

更详细的答案是不posssible,直到你说你用的是什么,并张贴源

+0

其实它是一个动态壁纸应用程序。在那里加载一个视频文件作为壁纸,为此,我在jni代码中使用ffmpeg编译该视频文件,并使用opengl绘制壁纸。 – Satheesh 2011-12-30 13:18:13

+0

真的需要手动删除引用吗?我相信,自从执行移出引用声明范围以来,引用将被自动销毁。 – sll 2012-01-01 20:24:36

+0

这取决于。执行范围与它无关。在onPause()之后的某个时候,android框架会放弃对您的活动的引用并使其可用于垃圾回收(并且由活动​​持有的引用将依次丢弃适合对象的资源...)但是,是否存储了对某些静态活动的引用变量(常见错误,因为活动也是在任何地方都需要的上下文),它根本不会被回收,所有的参考资料永远堵塞你的记忆 – 2012-01-02 08:45:13