活动被销毁与进程被杀死之间的区别

时间:2018-07-08 11:03:21

标签: android

  1. 调用onDestroy方法时,仅活动被破坏还是进程被杀死?
  2. 何时系统破坏活动并杀死进程?
  3. 销毁活动和销毁流程之间的区别是什么?活动销毁时是否应该清除ArrayList(或者在活动销毁时将其标记为系统进行垃圾回收)?并且如果我必须清除ArrayList(在onDestory方法中),如果系统在不调用onDestroy的情况下杀死了应用程序,将会发生什么情况。

我正在使用onDestroy方法关闭游标。

@Override
protected void onDestroy() {
    super.onDestroy();
   // closing cursor!
   mCursor.close();
}

我按下主页按钮,应用程序进入后台。如果系统在不调用onDestroy方法的情况下终止了应用程序,则会出现任何内存泄漏,因为我无法关闭游标(我在onDestroy方法中关闭了该游标)

2 个答案:

答案 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中运行时才会发生内存泄漏,而当其被杀死时则不会发生。