gpt4 book ai didi

android - 后台 Activity 的本地对象被 Xamarin Android 垃圾收集

转载 作者:行者123 更新时间:2023-11-29 21:31:32 25 4
gpt4 key购买 nike

我的应用在一堆 Activity 中导航(在同一个任务中)

A -> B -> C

向前走是可以的,但我注意到在我跳回 B(从 C)或 A(从 B)后,该 Activity 中的所有 CLR 对象都是空的。这包括本地字段和事件处理程序。

我的猜测是 Android 在内部序列化 Activity 堆栈(忽略 CLR 字段)从而导致 CLR GC 收集那些 Activity 的对象。这显然不是我们想要的,肯定有办法防止这种情况发生。

在 Activity 进入后台然后恢复后,有没有人设法保留 Activity 的 CLR 对象?

最佳答案

你是对的。当您在 Activity C 上时,A 和 B 都处于“已停止”状态,因此有资格被清理(移至“已销毁”状态,然后被垃圾收集)。看起来文档中的相关文章在这里:

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

非常基本的想法:您重写 onSaveInstanceState,Android 会在适当的时候调用它。然后它将传递给您的 onCreate() 方法,以便您可以在重新创建 Activity 时恢复它。

编辑:当然还有其他选择。当您的状态信息庞大时,您应该特别考虑替代方案,因为上面的方法(反)序列化您的状态,这可能会变得昂贵。

就个人而言,我倾向于将我需要的信息保存在数据库中,并在 onCreate() 中检查它,甚至在 onStart() 中检查它(当我需要对其他 Activity 中影响的变化使用react,这可能会在该 Activity 仍在内存中时发生)。您还可以将所需信息保存到文件或任何其他持久存储中。不同之处在于,您有责任了解何时应恢复状态,以及何时应重新开始。

请注意,将状态保存在静态变量中效果不佳。静态变量往往比 Activity 的实例变量持久,但它们可以在没有通知的情况下被删除,例如当你接到电话时。

关于android - 后台 Activity 的本地对象被 Xamarin Android 垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19373605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com