【问题标题】:Android Memory Management for Lifecycle生命周期的 Android 内存管理
【发布时间】:2010-12-17 17:07:38
【问题描述】:

我正在尝试确定如何在各种 Android 生命周期条件下确保我的应用程序安全,例如正在启动另一个应用程序、手机进入睡眠状态等。我了解生命周期状态和我可以挂钩的事件方法,但我我不确定我已经参考过的东西是如何处理记忆的。我很清楚,如果操作系统需要,我的应用程序可能随时被终止,但是个人引用呢?以下是一些示例场景:如果我的应用程序正在运行并且用户接到电话,或者用户启动另一个应用程序,或者手机进入睡眠状态。假设我的应用程序没有被杀死,我可以安全地使用我的引用还是会得到随机的空指针?我想这归结为... Android 是杀死还是不杀死应用程序,还是会从应用程序中回收一些内存(仍然有有效的引用)而不杀死它?

【问题讨论】:

    标签: android memory-management lifecycle


    【解决方案1】:

    大多数情况下,当用户切换到另一个应用程序或接听电话时,您的应用程序只会被暂停。当它回来时,onResume() 将被调用,它将继续正常运行,没有任何问题。参考文献之类的应该没问题。不过,建议您取消注册侦听器并在onResume() 中重新注册。

    您应该始终记住,您的应用也可能随时被完全终止,因此请保存您的数据。

    【讨论】:

    • 谢谢,这正是我需要知道的。也很高兴知道重新注册听众。
    • 很高兴我能帮上忙。祝你的应用好运。
    【解决方案2】:

    事实上,大多数情况下应用程序不会在短暂的中断中被杀死,例如电话或电子邮件,但如果您想支持这些情况,您应该执行清理或将数据保存在 onPause() 中。当应用程序返回时,它将执行onResume()

    在 Activity 销毁之前,引用不会消失,不要担心暂停 -> 恢复场景中的 NPE,除非你正在做一些非常奇怪的事情。

    如果您正在使用监听器或 GPS,您应该在onPause() 期间取消注册并稍后恢复。

    【讨论】:

    • 也感谢您的回复。不过,Computerish 获得了“答案”,因为该响应首先出现。
    猜你喜欢
    • 2011-06-27
    • 2012-12-17
    • 2013-08-08
    • 2020-04-27
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多