gpt4 book ai didi

android - 长时间后从后台恢复时应用程序崩溃

转载 作者:IT老高 更新时间:2023-10-28 23:12:41 26 4
gpt4 key购买 nike

我的应用程序在后台闲置很长时间后崩溃。我调试并发现它崩溃的原因是由于 NullPointerException。异常是由于应用程序单例类中的数据在应用程序处于后台时被垃圾收集器销毁。我在整个应用程序的每个 Activity 中都使用静态数据。

我的问题是:有没有办法让应用程序类的数据在后台持久化?还是有其他解决办法?

最佳答案

要获得更准确的答案,您可以将代码放在这里。开启时,Android 内存是有限的,因此 VM 可以删除它认为不必要的任何代码。

查看 Activity 生命周期方法,特别是 onResume 并确保您完全理解。很多时候应用程序崩溃只是因为没有正确使用 Activity 生命周期方法。

Activity 的另一个重要设计考虑因素是,无论持久性数据发生什么情况,您的 Activity 都应该使用一些默认值显示其 UI。所以假设是这样的,如果我有数据我会显示,如果我没有,我真的不在乎无论有没有数据,您的用户界面都不应崩溃。您可以使用 String.xml 来存储一些默认值,甚至在布局中。

如果您仍然想使用单例类,这很好,但请确保每次尝试访问单例时都进行以下检查。

if (instance==null)
instance=Singleton.getInstance()

您的 getInstance() 方法不仅会返回您当前的实例,还会确保

  • 它初始化所有对象和变量
  • 作为实例方法的其他单例方法

不要静态地从一个 Activity 访问数据到另一个。对于您现在面临的类型问题,这对 android 来说并不好,而且它也不是很好的 OOP 编程实践。

SharedPreference是保存数据的好方法,如果满足您的要求,那就去吧。

如果您想从不同的 Android 组件(如 Activity、Service 或 BroadcastReciever)传递数据,您可以将其放入包中并作为 Intent 发送。而且,它们一如既往地是 SQLLite 数据存储、文件 IO 等。

关于android - 长时间后从后台恢复时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15964411/

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