java - 在android应用程序中的活动之间共享类的单个实例?
问题描述
我正在 Android Studio 中创建一个 Android 应用程序,我正在使用 Java 进行编码。
我的应用程序将有一个处理与 SQLite 数据库的连接的类,它还将具有抽象访问数据库的类,即朋友列表以及按朋友排序的发送和接收的消息列表。
我目前有三个活动,主要活动,一个用于列出所有朋友的列表,一个用于显示特定的聊天对话。
我的问题是在我的活动之间共享一个类的实例,即数据库类和其他类(比如朋友管理器)的最佳实践是什么。我不想为每个活动复制这些类,而是在我的应用程序的整个生命周期中保留一个实例。
一个例子是“FriendManager”类,它具有提供朋友列表、删除和添加新朋友等的接口。我想在创建所有朋友列表时使用它,也想在显示对话时使用它因为它将保存对“MessageManager”类的引用,该类负责从数据库(和远程位置)加载消息。
解决方案
一种方法是使用单例模式,如https://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html中的模式 1 所示
虽然 Google 的最佳实践不是直接使用 SQLite,而是通过数据库室 https://developer.android.com/training/data-storage/room/index.html
他们仍然说
如果您的应用在单个进程中运行,则在实例化 AppDatabase 对象时应遵循单例设计模式。每个 RoomDatabase 实例都相当昂贵,您很少需要在单个进程中访问多个实例。
然后在他们的示例中以与单例模式相同的方式实现它,如https://codelabs.developers.google.com/codelabs/android-room-with-a-view/#6中所示
推荐阅读
- spring-boot - 如何将 HTTP URL 传递给 antMacher
- javascript - 如何使用 vue 监听 html 标签的 onload 事件?
- php - 使用laravel excel映射具有多个标题的查询结果
- postgresql - 错误:带有时区的时间戳类型的输入语法无效
- amazon-web-services - 如何限制最终用户访问我的 AWS 弹性搜索域终端节点?
- javascript - 比较两个 HTML 元素的顺序
- r - 如何使用 toString 创建字符串?
- c++ - 在 Windows 下在 c++ 中的 std::string 中捕获 libcurl 的输出
- python - 如何打印mysql数据库打印样式?
- javascript - 告诉浏览器为同一域下的每个路径分别存储不同的密码