【问题标题】:activity onStop() and destroying process活动 onStop() 和销毁进程
【发布时间】:2017-11-12 18:32:45
【问题描述】:

我怀疑这部分android“Activity生命周期”教程的含义:

使用 onStop() 释放可能会泄漏内存的资源也很重要,因为系统可能会在不调用 Activity 的最终 onDestroy() 回调的情况下终止托管您的活动的进程。

据我了解,当进程被终止时,与其关联的所有内存都会被释放。泄漏是具有较大范围的组件拥有对具有较小范围的组件的引用(对上下文、处理程序、内部类等的静态引用)的情况。但是如果一个进程已经死了,那么根本就没有活着的组件。是的,其中一些可以稍后重新创建,但它们不会引用过去的某些“旧”组件。任何人都可以举例说明杀死进程会导致内存泄漏的情况吗?还是我的(某些)假设完全错误?

提前致谢!

【问题讨论】:

    标签: android android-activity memory-leaks


    【解决方案1】:

    看,如果你不使用 onStop() 那么静态变量或引用的内存泄漏就会泄漏。因为,在调用 onDestroy() 之前它们不会被销毁。一些例子是-

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

    2:不要在任何静态对象中存储任何 Drawable,Drawables 持有对其所有者 View 的引用,这些 View 持有对其所有者 Activity 的引用,因此如果您持有任何 Drawable,您将不必要地持有大量对象/内存

    因此,您应该始终关闭连接或在 onStop() 中将静态视图的初始化设置为 null,以防止内存泄漏。希望它清除:)

    【讨论】:

    • 静态引用可以在 onDestroy() 调用后保留,这取决于应用程序逻辑。我提到静态引用是进程处于活动状态时内存泄漏的常见原因。问题是——如果进程死了,会不会有内存泄漏?
    • 不是真的......这通常是保护内存泄漏所必需的......通常就我所使用的..当进程死亡时静态引用被破坏......可能有一些情况这不会发生的地方..
    • 嗯,好吧,我想说静态引用对 android 来说无论如何都是不好的做法,它们总是比利润更令人头疼。但是如果我使用 mvp 并发调用网络呢?我不想在每次隐藏/显示 (onStart()/onStop()) 时拨打/拒绝此电话。如果在整个进程被终止且 onDestroy() 未被调用的情况下我不会在 onStop() 中放弃此调用,我是否应该担心某些线程/演示者会泄露我的视图(活动/片段或其他)?
    【解决方案2】:

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

    【讨论】:

    • 感谢您的澄清
    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多