0

大家好!

我有一个Activity在显示可见布局时分配了相当多的内存。ActivityUI 在很大程度上依赖于这个内存,但是,在用户离开后(通常通过将另一个焦点放在焦点上) ,没有必要保留这些分配Activity

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

所以我的问题:

  1. 释放内存(破坏 UI)是否安全onStop()(根据文档,调用Activity时不可见onStop())?
  2. onStop()可靠吗?
  3. onStop()每次被调用时都保证被调用吗onPause()


编辑:
我觉得我必须更清楚地解释什么让我感到困惑。根据developer.android.com

...对于那些被标记为可终止的方法,在该方法返回后,托管活动的进程可能会在任何时候被系统终止,而无需执行另一行代码...

onStop()方法被标记为“可杀死”。

  • 以上是否意味着(尤其是“ after that method returns”部分)整个范围都onStop()可以保证运行,但是一旦它返回,就不能保证任何运行时(例如,在 中启动的衍生线程onStop())?

  • 或者这是否意味着它onStop()甚至可能在它到达其范围的末尾(作为killed at any time部分)之前被中断?

  • 或者它是否意味着我 - 在我神圣的愚蠢中 - 看不到的其他东西。

4

4 回答 4

0

onStop()对于您的目的,应该是安全可靠的。

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

于 2011-11-02T15:19:22.000 回答
0
  1. 它和其他任何东西一样安全吗?更糟糕的是,您的应用程序将被 onDestroy 杀死。在移动开发中,您基本上必须假设在任何给定时刻您的应用程序都可能被杀死。
  2. 一段时间以来,我发布媒体对象一直很可靠。
  3. 不能真正保证,因为有时会根据发生的情况调用 onDestroy。
于 2011-11-02T15:22:12.233 回答
0

不,这是不安全的,因为只有 onPause() 保证会被调用。onPause() 意味着你的活动失去焦点 - 放弃不必要的资源的完美场所

于 2011-11-02T15:24:20.003 回答
0

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

在里面做事onPause确保你需要保存的项目在放手之前仍然完好无损——例如你需要将文本保存在 EditText 中,或者 RadioButtons 的开/关位置等。

然而,释放不再需要这些东西了,所以如果你在你的onStop

于 2011-11-02T15:26:21.180 回答