Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓系统内存泄漏的处理_Android_Garbage Collection_Java Native Interface - Fatal编程技术网

Android 安卓系统内存泄漏的处理

Android 安卓系统内存泄漏的处理,android,garbage-collection,java-native-interface,Android,Garbage Collection,Java Native Interface,我开发了一个使用共享库的小应用程序。当我在我的设备堆中运行android应用程序时,内存正在迅速增加。我尝试使用gc()来减少这一点,但这对我来说是行不通的。我曾经收到一条信息,比如内存不足,不再有后台进程,我的应用程序退出。如何解决此问题?您不仅需要使用GC,还需要删除对不再需要的对象的引用-GC将不会回收引用的对象。您还必须仔细观察JNI库的功能,并采取必要的预防措施,以防它分配了启动线程的内存 更详细的答案是不可能的,直到你说出你正在使用什么并发布源代码是否有分配内存/资源、创建新类实例的

我开发了一个使用共享库的小应用程序。当我在我的设备堆中运行android应用程序时,内存正在迅速增加。我尝试使用gc()来减少这一点,但这对我来说是行不通的。我曾经收到一条信息,比如内存不足,不再有后台进程,我的应用程序退出。如何解决此问题?

您不仅需要使用GC,还需要删除对不再需要的对象的引用-GC将不会回收引用的对象。您还必须仔细观察JNI库的功能,并采取必要的预防措施,以防它分配了启动线程的内存


更详细的答案是不可能的,直到你说出你正在使用什么并发布源代码

是否有分配内存/资源、创建新类实例的循环?请显示这样的循环代码实际上这是一个活的壁纸应用程序。我加载了一个视频文件作为墙纸,为此我在jni代码中使用ffmpeg编译了该视频文件,并使用opengl绘制墙纸。在jni文件中,我使用av_malloc函数。它在渲染器方法中从视频引擎重复调用。实际上,它是一个实时墙纸应用程序。在这种情况下,我加载了一个视频文件作为墙纸,为此我在jni代码中使用ffmpeg编译了该视频文件,并使用opengl绘制墙纸。真的需要手动删除引用吗?我相信引用会在执行移出引用声明范围后自动销毁。这取决于。执行范围与此无关。在onPause()之后的某个时间,android框架会删除对活动的引用,并使其可用于垃圾收集(活动持有的引用将被删除,从而使IND对象符合条件…),但您是否将对活动的引用存储在某个静态变量上(常见的错误,因为活动也是虚拟环境,在任何地方都是需要的)它根本不会被回收,所有的引用都会永远阻塞你的记忆