大家好!
我有一个Activity
,它在显示可见布局时分配了大量内存。用户界面在很大程度上依赖于此内存,但是,在用户离开Activity
之后(通常通过使另一个Activity
聚焦),无需保留这些分配。
Activity
开始在onResume()
中分配内存,一切都很好。不过,这种解除分配让我感到困惑。截至目前,我释放了onPause()
中的所有内存,这些内存也会破坏相应的UI元素。由于Activity
在运行onPause()
时仍然可见,因此用户将看到实际的UI元素被破坏。这很难看,而不是我想要的。
所以我的问题:
onStop()
中释放内存(销毁用户界面)是否安全(根据文档Activity
在调用onStop()
时不可见)?onStop()
可靠吗?onStop()
时都会保证onPause()
被调用吗?
的 编辑:
我觉得我必须更清楚地解释一下令我困惑的事情。根据{{3}}:
...对于那些被标记为可以杀戮的方法,之后 方法返回托管活动的进程可能被[杀死] 系统在任何时候都没有执行其代码的另一行......
onStop()
方法被标记为“killable”。
上述意味着(特别是“after that method returns
”部分)是否保证onStop()
的整个范围都能运行,但一旦它返回其他内容就不能保证任何运行时(例如a产生的线程在onStop()
)开始?
或者是否意味着onStop()
即使在到达其范围的末尾之前也可能被中断(从killed at any time
部分开始)?
或者这是否意味着我 - 在我神圣的愚蠢中 - 别看。
答案 0 :(得分:0)
onStop()
应该是安全可靠的。
“保证”在这种情况下是相对的,因为您的活动可能会在没有任何通知的情况下被杀死。但在这种情况下,无论如何都会释放你的内存资源。
答案 1 :(得分:0)
答案 2 :(得分:0)
不,它不安全,因为只保证调用onPause()。 onPause()意味着你的活动失去了焦点 - 完美的地方放弃不必要的资源
答案 3 :(得分:0)
不同之处在于活动认为onPause
应该在“销毁”视图之前先完成执行,而onStop
是在视图已经在后台之后的生命周期阶段 - 意味着活动不再可见。
在onPause
内进行操作可以确保您需要保存的项目在放弃之前仍然完好无损 - 例如,您需要将文本保存在EditText或RadioButtons的开/关位置,等
解除分配不再需要这些东西了,所以如果你在onStop