我正在使用onDestroy方法关闭游标。
@Override
protected void onDestroy() {
super.onDestroy();
// closing cursor!
mCursor.close();
}
我按下主页按钮,应用程序进入后台。如果系统在不调用onDestroy方法的情况下终止了应用程序,则会出现任何内存泄漏,因为我无法关闭游标(我在onDestroy方法中关闭了该游标)
答案 0 :(得分:2)
调用onDestroy方法时,只会破坏活动
是的
...还是进程被杀死?
否。
系统破坏活动时
Android将在活动结束时销毁活动,例如当用户按下BACK按钮时(假设没有其他东西可以处理BACK按下)。自从活动可见以来,设备进行了配置更改(假设您未在清单中禁用此功能),Android就会销毁可见活动。 Android 可以在终止进程的过程中破坏活动,但这不能保证。
什么时候杀死进程?
当可用系统RAM的数量变少时,Android将根据需要终止进程以释放系统RAM。有关更多信息,请参见the documentation。
破坏活动和杀死过程之间有什么区别?
它们之间没有密切的联系。
活动销毁时是否应该清除ArrayList
我们不知道您指的是ArrayList
。
如果系统在不调用onDestroy方法的情况下终止了应用程序,则会因为我无法关闭游标(我在onDestroy方法中关闭该游标)而导致任何内存泄漏
不。进程终止后,将释放与该进程关联的所有内存。
答案 1 :(得分:1)
当JVM的进程结束时,JVM将“清理”您的App中使用的所有内存。这意味着,如果进程被杀死,则无需释放执行期间分配的所有对象/内存。
此外:杀死进程不会触发任何“ onDestroy()”事件,也不会触发“ try {}”块的“ finally”部分,但它会在那一刻完全停止应用程序运行,而不会让应用程序执行其他任何操作
像Cursors这样的特殊事物由JVM管理,当Process结束时(使用普通命令或通过“ kill process”过程),它将释放它们,因此在终止进程过程之后不会发生任何内存泄漏。 分配内存块(使用“ malloc()”)时,在JNI中也会发生相同的行为。
仅当您的应用仍在JVM中运行时才会发生内存泄漏,而当其被杀死时则不会发生。