在Application类中创建ORMLite数据库助手是否可以?

Ale*_*lex 15 android ormlite

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

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

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

((MyApplication) getApplicationContext()).getHelper();
Run Code Online (Sandbox Code Playgroud)

你认为以这种方式使用它是一个好主意还是会有一些内存泄漏或其他问题?我关心的是onTerminate永远不会在真正的设备上工作......我正处于"尝试新东西"的舞台上,所以我想听听有关这方面的任何意见,以消除我将来可能用错误的方法得到的问题,而不是重写代码.

Gra*_*ray 7

总体机制看起来很好@Alex但据我所知,onTerminate()它仅用于模拟环境,因此没有多大用处.当程序在真实设备上终止时,你的程序会被Android操作系统杀死,因此没有理由担心内存泄漏等等.

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

  • `你的程序在真实设备上终止时被Android操作系统杀死,因此没有理由担心内存泄漏等等.这是否意味着没有必要明确释放你的助手,如果它是实现为@Alex有,因为我们保证一个实例并且在设备终止时删除了所有内容?(我正在为@Stefan寻找类似的策略).谢谢. (5认同)
  • 我很好奇这很好.如果我遵循这种方法,我是否需要释放助手? (3认同)