在onStop()中释放资源是否安全?

时间:2011-11-02 14:56:12

标签: android activity-lifecycle

大家好!

我有一个Activity,它在显示可见布局时分配了大量内存。用户界面在很大程度上依赖于此内存,但是,在用户离开Activity之后(通常通过使另一个Activity聚焦),无需保留这些分配。

Activity开始在onResume()中分配内存,一切都很好。不过,这种解除分配让我感到困惑。截至目前,我释放了onPause()中的所有内存,这些内存也会破坏相应的UI元素。由于Activity在运行onPause()时仍然可见,因此用户将看到实际的UI元素被破坏。这很难看,而不是我想要的。

所以我的问题:

  1. onStop()中释放内存(销毁用户界面)是否安全(根据文档Activity在调用onStop()时不可见)?
  2. onStop()可靠吗?
  3. 每次调用onStop()时都会保证onPause()被调用吗?

  4. 编辑:
    我觉得我必须更清楚地解释一下令我困惑的事情。根据{{​​3}}:

      

    ...对于那些被标记为可以杀戮的方法,之后   方法返回托管活动的进程可能被[杀死]   系统在任何时候都没有执行其代码的另一行......

    onStop()方法被标记为“killable”。

    • 上述意味着(特别是“after that method returns”部分)是否保证onStop()的整个范围都能运行,但一旦它返回其他内容就不能保证任何运行时(例如a产生的线程在onStop())开始?

    • 或者是否意味着onStop()即使在到达其范围的末尾之前也可能被中断(从killed at any time部分开始)?

    • 或者这是否意味着我 - 在我神圣的愚蠢中 - 别看。

4 个答案:

答案 0 :(得分:0)

为了您的目的,

onStop()应该是安全可靠的。

“保证”在这种情况下是相对的,因为您的活动可能会在没有任何通知的情况下被杀死。但在这种情况下,无论如何都会释放你的内存资源。

答案 1 :(得分:0)

  1. 它和其他东西一样安全吗?更糟糕的是,您的应用程序将被onDestroy杀死。在移动开发中,您基本上必须假设在任何特定时刻您的应用都可能被杀死。
  2. 我暂时释放媒体对象对我来说是可靠的。
  3. 不能保证,因为有时会根据发生的事情调用onDestroy。

答案 2 :(得分:0)

不,它不安全,因为只保证调用onPause()。 onPause()意味着你的活动失去了焦点 - 完美的地方放弃不必要的资源

答案 3 :(得分:0)

不同之处在于活动认为onPause应该在“销毁”视图之前先完成执行,而onStop是在视图已经在后台之后的生命周期阶段 - 意味着活动不再可见。

onPause内进行操作可以确保您需要保存的项目在放弃之前仍然完好无损 - 例如,您需要将文本保存在EditText或RadioButtons的开/关位置,等

然而,

解除分配不再需要这些东西了,所以如果你在onStop

中这样做会很好