【问题标题】:is it ok to create ORMLite database helper in Application class?可以在 Application 类中创建 ORMLite 数据库助手吗?
【发布时间】:2011-11-21 08:19:33
【问题描述】:

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

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

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 永远无法在真实设备上运行......我正处于“尝试新东西”的阶段,所以想听听任何关于此的 cmets 以消除我将来可能会遇到的问题,方法错误且没有重写代码。

【问题讨论】:

    标签: android ormlite


    【解决方案1】:

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

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

    【讨论】:

    • 我目前也在研究从不同位置(Activity、WidgetProvider、DialogFragments 和 Service)访问 DatabaseHelper 的最佳策略……通过这样做,您似乎可以避免使用 OpenHelperManager.getHelper(context, DatabaseHelper.class)……我说的对吗?
    • You program gets killed by the Android OS when it terminates on a real device so there is no reason to be worried about memory leaks and the such. 这是否意味着不需要显式释放您的助手,如果它像@Alex 那样实现,因为我们保证一个实例并且设备上的所有内容都被删除终止? (我正在寻找与@Stefan 类似的策略)。谢谢。
    • 我很好奇这很好。如果我遵循这种方法,是否需要释放帮助程序?
    • 对不起,我只是不知道。我不是安卓程序员@Sakiboy。也许专门围绕这个领域问另一个 SO 问题?
    • 很公平,@Gray。感谢图书馆:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2010-11-07
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多