android - 可以在应用程序类中创建 ORMLite 数据库助手吗?

标签 android ormlite

我正在尝试使用 ORMLite 包创建一个 android 应用程序。我有一些 Activity 和服务,也使用 https://github.com/tomquist/Android-Error-Reporter能够从客户的掌上电脑接收错误信息。 ORMLite 要求所有 Activity 和服务扩展 OrmLiteBaseActivity 等或向每个 Activity 添加适当的代码,以便能够获取数据库助手并在 Activity 完成后释放它。所以将此代码添加到每个 Activity 或服务并不是很方便。我还有一些可以使用数据库的辅助类

我还有一个包含一些全局信息和方法的应用程序类。所以我决定在应用程序类中打开 ormlite 助手,并在所有 Activity/类中使用它,如下所示:

public class MyApplication extends Application {
  private volatile DatabaseHelper databaseHelper = null;

  @Override
  public void onCreate() {
    super.onCreate();
  }

  @Override
  public void onTerminate() {
    if (databaseHelper != null) {
      OpenHelperManager.releaseHelper();
      databaseHelper = null;
    }
    super.onTerminate();
  }

  public DatabaseHelper getHelper() {
    if (databaseHelper == null) {
      databaseHelper = OpenHelperManager.getHelper(this, DatabaseHelper.class);
    }
    return databaseHelper;
  }
}

并以这种方式在其他类中使用它:

((MyApplication) getApplicationContext()).getHelper();

您认为以这种方式使用它是个好主意,还是会出现一些内存泄漏或其他问题?我担心的是 onTerminate 永远不会在真实设备上运行......我正处于“尝试新事物”的阶段,所以想听听对此的任何评论,以消除我将来可能因错误的方法而没有遇到的问题重写代码。

最佳答案

整体机制看起来不错@Alex 但据我所知,onTerminate() 仅用于 emulated environments所以用处不大。当程序在真实设备上终止时,您的程序会被 Android 操作系统杀死,因此没有理由担心内存泄漏等问题。

您的代码最重要的是它保证了单个 databaseHelper 实例。每个实例都有自己的数据库连接,当在程序中打开一 (1) 个以上的数据库连接时,就会出现问题。 Sqlite 可以处理同时使用同一个连接的多个线程,但它不能很好地处理多个连接,并且可能会出现数据不一致的情况。

关于android - 可以在应用程序类中创建 ORMLite 数据库助手吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8208992/

相关文章:

java - 在 ORMLite 中为一个类创建多个表

java - Ormlite - 扩展 BaseDaoImpl 时构造函数调用失败

java - RoboSpice 和 ORMLite - 访问数据

android - 如何创建单表虽然类包含嵌套类?

c# - 如果此构建错误不断重复,我该怎么办

java - 从左向右滑动从 ListView 中删除项目

java - Android - 从 URL 获取图像而不保存到存储

android - Flutter 在尝试 Firebase 身份验证时无法捕获 PlatformException

android - 预装的 PdfViewerActivity 不适用于 SelfSigned 可信用户证书 Android 11 版本 2

java - ORMLite 外部字段类没有 id 字段