gpt4 book ai didi

Android Activity Lifecycle和Singleton以及相互引用的持久化(内存泄漏)

转载 作者:搜寻专家 更新时间:2023-11-01 09:00:17 25 4
gpt4 key购买 nike

据我了解,不能期望单例在 Android 应用程序中保存持久数据,因为应用程序可能会在应用程序的“表观生命周期”中多次被销毁和重新创建。这本身对我来说不是问题。问题在于当应用程序经历这个销毁 -> 创建过程时到底发生了什么。

我在论坛上读到应用程序将在新进程中重新创建,我假设旧进程及其所有内存管理将被销毁。然而,这是否意味着由开发人员来清理所有具有相互引用的节点的单例和逻辑树?还是进程的破坏会自动清理一切?我不是经验丰富的 Java 开发人员,所以我对 GC 仍有很多不清楚的地方。

我正在处理的特定项目在设备的整个正常运行时间内只运行一个应用程序。在桌面术语中,单例不会有内存泄漏的危险,因为应用程序只会在设备关闭时关闭,并且始终处于同一进程中。然而,Android 让它变得更加困难。

附带说明一下,什么是适用于使用模拟器的 Android 的良好内存泄漏检测器?

最佳答案

基本上,您必须避免保持对 UI 元素的引用。该 UI 元素绑定(bind)到可以销毁的 Activity 的上下文。

如果你真的需要一个单例而不是扩展Application用于强制执行的类。该实例不会在 Activity 关闭或轮换等情况下被销毁。

您还应该知道您可以在代码中处理这些事件。这意味着您的 Activity 不能重新启动。恕我直言,重启 Activity 几乎没有任何意义。要实现它,您需要添加 configChanges attribute到你的 list 。我个人使用这个配置:

<activity android:configChanges="orientation|screenSize|keyboardHidden" ...>

关于Android Activity Lifecycle和Singleton以及相互引用的持久化(内存泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15597622/

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