Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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_Android Activity_Memory Management_Out Of Memory - Fatal编程技术网

Android 退出活动后如何释放实际的活动对象内存?

Android 退出活动后如何释放实际的活动对象内存?,android,android-activity,memory-management,out-of-memory,Android,Android Activity,Memory Management,Out Of Memory,我的android应用程序出现了一个OutofMemoryError,我有点困惑到底发生了什么。基本上,我可以在最初几次运行它,但当我尝试退出它,然后快速重复地再次打开它时,我会出现内存不足错误 我试着研究这个主题,发现recycle()方法通常是个问题。但是,我对每个位图(存储在对象容器中,存储在arraylist中)调用了recycle方法,但仍然遇到了问题 完成此操作后,当我遇到一些奇怪的情况时,我尝试使用Eclipse内存分析器查看堆转储。退出活动后(回到launcher活动中,然后通过

我的android应用程序出现了一个OutofMemoryError,我有点困惑到底发生了什么。基本上,我可以在最初几次运行它,但当我尝试退出它,然后快速重复地再次打开它时,我会出现内存不足错误

我试着研究这个主题,发现recycle()方法通常是个问题。但是,我对每个位图(存储在对象容器中,存储在arraylist中)调用了recycle方法,但仍然遇到了问题

完成此操作后,当我遇到一些奇怪的情况时,我尝试使用Eclipse内存分析器查看堆转储。退出活动后(回到launcher活动中,然后通过一个按钮再次打开该活动,我使用内存分析器拍摄了堆转储的屏幕截图。结果表明,每次我退出并重新进入该活动时,都会创建另一个activity对象实例,而旧的实例不会被释放,即使onDestroy()正在调用方法(该方法还包含回收/清理代码)

然后,我尝试重写finalize方法,查看当活动退出返回到launcher活动时是否调用了它,但没有调用它。我在其他一些stackoverflow线程上读到finalize()并不总是被调用,所以最后,我仍然不确定发生了什么

最后,我的问题是:
我应该如何确保活动对象(活动对象本身,而不是从活动中创建的东西)是从活动退出后释放到另一个活动?

一个选项是在清单文件中将启动模式设置为singleInstance或singleTask。这将确保未创建该活动的另一个实例


释放活动对象的一种方法是调用它的onDestoy()方法。获取活动对象,将其公开为静态,并在onDestroy()中将其设为null

然后在onCreate方法中,通过以下方法初始化obj

obj=this;
在onDestroy()方法中执行以下操作:

obj= null;

听起来您的应用程序存在内存泄漏问题,我建议您遵循以下链接:


在进行堆转储之前,您是否运行了GC,但仍然看到活动的多个实例?如果是,您可能以某种方式泄漏了活动。如果没有代码或关于您正在执行的操作的更多信息,很难猜测这是如何发生的。您是否获得了解决方案Hi,您是否获得了解决方案??您介意与任何人共享它吗y@Vegolath您的第一个链接已断开-这是正确的链接-创建一个包含对对象的附加引用的变量,并将该变量设置为null将永远不会强制释放对象内存。
obj= null;