[英]Saving data in the Application scope in Android
我正在 Android 中构建一个具有多个活动的应用程序。 我有一个 TodoItem 类型的TodoItem
列表,我从Firestore 数据库中的一个集合中获得,我需要从多个活动中访问该列表以对列表进行更改和更新。
为此,我考虑将列表保存在应用程序 scope中(这是个好主意吗?)。 出于这个原因,我创建了一个class MyApplication extends Application
(并将其添加到 Manifest 文件中)。
我认为也许我应该创建一个名为DataManager
的MyApplication
来保存应用程序范围的信息,例如我的TodoItem TodoItem
(在这里我再次问:这是个好主意吗?或者也许有更好的解决方案?)。
此时,我正在尝试确定创建和保存DataManager
class 的更好方法:
一个想法是使DataManager
成为Singleton class 并将其保存为class的MyApplication
字段。 这样,活动将能够使用DataManager.getInstance()
获取 class 的实例,而无需使用getter方法从应用程序 class 获取它。 在这种方法中,我必须创建DataManager
的实例并在应用程序的OnCreate()
方法中使用它初始化应用程序的字段。
第二个想法是使其成为非单例,将DataManager
字段添加到MyApplication
中,并在应用程序 class 中创建一个名为getDataManager()
的 getter。 getter 将检查该字段是否为null
(即是否已初始化)并相应地创建一个新实例。 这样,活动将使用((MyApplication) getApplication()).getDataManager()
获取实例。
我想听听您对我解决问题的方法有何看法,以及您是否有任何其他建议或其他方法来改进我建议的设计。
当您的数据源很简单时,这是一个不错的方法。 您可以创建 singleton class 来保存和管理数据,包括从 singleton 读取和写入数据。
当您想使用复杂数据时,您可以将其存储到您的设备磁盘而不是 memory。 Android 应用程序支持您使用文件、数据库或键值首选项存储数据。 至于您的情况,您可以使用数据库来存储您的 todolist。 Android 支持 sqlite 用于这些工作,我们有官方的 orm 库,称为room
。
原始 sqlite: https://developer.android.com/training/data-storage/sqlite
房间库:https://developer.android.com/topic/libraries/architecture/room
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.