应用程序类和对象状态

3
我一直在研究Application类和保持对象状态的方法,我阅读了很多来自互联网的内容,包括Android文档(生命周期、建议等)、有关该主题的问题/答案以及其他材料,但仍然有一些疑问,我希望将其解决清楚,以便未来的开发。我想这对于每个Android开发者都是一个常见的问题,因此我想知道经验(不只是文档)对它的看法。所以我有一些问题:
1- Application类可以从内存中删除或在应用程序在前台时初始化吗?就像我有一个子类的Application,并且它有一些静态变量来保存状态,我知道如果应用程序进入后台,它可能会因为内存而被杀死并重新启动,但当它在前台时会发生吗?
2- 如果操作系统随时可能擦除或初始化应用程序内存,唯一可靠的保持对象状态的方法是使用数据库或文件吗?(真的希望不是这样!)
3- 有什么其他提示可以帮助解决此问题。

1
此外,你的手机电池可能随时被拆卸而没有通知。为了确保数据安全,请尽早将其提交到sharedpref、文件、数据库或其他存储介质中。 - njzk2
我不想保留我的数据,有些数据只在应用程序的生命周期内存中才有意义,我不想永久保存它。 - labreu
1个回答

2

从我的经验来看,您对文档的解释反应过度且想得太多了。大多数应用程序不需要也不应该扩展Application。

1- 应用程序仅在极端情况下在前台运行时才会被终止。因此,您现在应该忘记这一部分,只关注您的应用程序本身。如果发生这种情况,用户将重新启动您的应用程序。

2- 状态对象应该通过覆盖onSaveInstanceState(Bundle outState)和onRetainCustomNonConfigurationInstance()保存在activity生命周期中(而不是APPLICATION),并在onCreate(Bundle savedInstances)和getLastNonConfigurationInstance()中读取它们的值回来。那些方法是为activities设计的,可能已经过时了,我知道有些是的,请阅读文档,他们会告诉你哪些可以用于fragments。使用Fragments。状态还可以通过intents / bundles从一个activity传递到另一个activity。

3- 要保留持久数据,您应该使用数据库和SharedPreferences,在活动和fragment可用的回调函数中使用活动状态。如果不知何故,您的应用程序有某些相当特殊的需求,您可以创建单例,但相信我,99%的应用程序不需要。

希望有所帮助!


是的,也许我有点反应过度,但这是因为我在上一个应用程序中看到了一些奇怪的行为。我在Application子类中有一些静态变量,它们运行得很好,但偶尔这些变量似乎就这样初始化了,这就是为什么我开始搜索并想知道它是如何工作的。无论如何,你的回答真的很好,你关于避免那种模型的观点是正确的,我会记住这点以备将来开发之需。 - labreu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接