繁体   English   中英

在 Android 中的应用程序 scope 中保存数据

[英]Saving data in the Application scope in Android

我正在 Android 中构建一个具有多个活动的应用程序。 我有一个 TodoItem 类型的TodoItem列表,我从Firestore 数据库中的一个集合中获得,我需要从多个活动中访问该列表以对列表进行更改和更新。

为此,我考虑将列表保存在应用程序 scope中(这是个好主意吗?)。 出于这个原因,我创建了一个class MyApplication extends Application (并将其添加到 Manifest 文件中)。

我认为也许我应该创建一个名为DataManagerMyApplication来保存应用程序范围的信息,例如我的TodoItem TodoItem (在这里我再次问:这是个好主意吗?或者也许有更好的解决方案?)。

此时,我正在尝试确定创建和保存DataManager class 的更好方法:

  • 一个想法是使DataManager成为Singleton class 并将其保存为classMyApplication字段。 这样,活动将能够使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM