活动 onStop() 和销毁进程

3
我对Android“Activity生命周期”教程中的这一部分含义表示怀疑:
“在onStop()中释放可能泄漏内存的资源非常重要,因为系统有可能在不调用活动的最终onDestroy()回调的情况下杀死托管您的活动的进程。”
据我理解,当进程被杀死时,与之关联的所有内存都会被释放。泄漏是指具有更大作用域的组件拥有对具有较小作用域的组件的引用(静态引用到上下文、处理程序、内部类等)。但是,如果进程已经死亡,则根本没有组件存活。是的,其中一些组件可能稍后会重新创建,但它们不会保留对过去某些“旧”组件的引用。能否举例说明杀死进程可能导致内存泄漏的情况?或者我的某些假设完全错误吗?
提前感谢!
2个回答

1

看,如果您不使用onStop(),那么静态变量或引用的内存泄漏会被泄漏。因为,它们直到调用onDestroy()才被销毁。以下是一些示例-

1:停止/关闭您不再需要的任何服务/文件/连接。

2:不要在任何静态对象中存储任何Drawable,Drawable保留对其所有者View的引用,该View保留对其所有者Activity的引用,因此,如果您保留任何Drawable,则会不必要地保留大量对象/内存

因此,您应该始终在onStop()中关闭连接或将静态视图初始化为空,以防止内存泄漏。希望这能解决问题 :)


静态引用可以在调用onDestroy()方法后保留,这取决于应用程序的逻辑。我提到静态引用是进程存活期间内存泄漏的常见原因。问题是 - 如果进程已死亡,是否可能存在内存泄漏? - StopTalking
并不完全是这样...通常需要这样做来防止内存泄漏...就我使用的情况而言,静态引用在进程结束时会被销毁...但也有一些情况下可能不会发生这种情况... - Ankit
嗯,我想说静态引用对于安卓来说总是个坏习惯,它们总是会带来更多的麻烦而不是好处。但是,如果我使用MVP并在网络上进行并发调用呢?我不想在每次hide/show(onStart() / onStop())时进行拨打/拒绝此电话。如果整个进程被杀死并且没有调用onDestroy(),我应该担心某些线程/ Presenter泄漏了我的视图(活动/片段或其他),如果我不在onStop()中放弃这个调用吗? - StopTalking

0

文档中的措辞不太好。当您的操作系统进程被终止时,所有内存都会被回收。在这种情况下,不可能出现内存泄漏。


感谢澄清。 - StopTalking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接