【问题标题】:Android - How to use ORMLite dbhelper for whole app lifecycleAndroid - 如何在整个应用生命周期中使用 ORMLite dbhelper
【发布时间】:2014-07-18 13:38:40
【问题描述】:

我想使用 ORMLite,但我不喜欢为每个活动管理 1 个数据库助手。在整个应用程序生命周期中拥有一个不是更好吗?到现在我都用过greendao,没有这个问题。

我想实现它,但是在销毁应用程序时找不到任何合适的方法来正确释放 db helper(我可以在应用程序的 onCreate 中轻松打开它),因为没有应用程序的 onDestroy() 方法。

有人有办法吗?

【问题讨论】:

  • 在Application的onResume/onPause中打开/关闭是否太贵?

标签: android database helper ormlite android-context


【解决方案1】:

OrmliteOrmLiteBaseActivity 可以自己管理与活动周期的连接。你所有的活动都应该扩展这个类,你不需要关心什么时候销毁连接。可以多次调用helper,连接释放在 onDestroy() 每个活动的方法。

如果你的activity不是base android activity,例如SherlockActivityActionBarActivity,你可以考虑从OrmLiteBaseActivity复制代码,制作你自己的base activity,然后扩展它。

这就是我在许多应用程序中所做的,我认为这没有任何问题。希望这能有所帮助!
P/s:你甚至可以用OrmLiteBaseService对android服务做同样的事情

【讨论】:

  • 嗨,我照你说的做了,但是在运行时我有这个异常: 原因:java.lang.IllegalStateException:找不到 OpenHelperClass,因为没有类 com.thinple 的通用参数。 smart.android.activity.Act_LoginRegister 扩展了 OrmLiteSqliteOpenHelper。您应该改用 getHelper(Context, Class) 。那是因为我已经有一个扩展 ActionBarActivity 的超级活动。我将 OrmLiteBaseActivity 中的代码复制到我的超级活动中,删除了泛型类型(我知道哪个是我的 db 助手类)。
  • 如果我调用 OpenHelperManager.getHelper(context, SmartBaseActivity.class) 它不会编译
  • 我解决了使用通过静态同步 getInstance() 访问的单例,正如 Gray Watson(ORMLite 创始人)在 Stack 上的回答中所述
  • @LorenzoBarbagli 好吧,有多种方法可以访问 ormlite 助手。单例是一种好方法,但您必须管理何时释放数据库连接。所以我建议使用 ormlite helper 但尊重活动生命周期的更好方法。在您的情况下,getHelper 方法中的第二个参数是错误的。这是一个给你的例子pastebin.com/mBHTc0rQ
【解决方案2】:

您可以使用Singleton 模式:

package com.example.stackoverflowsandbox;

public class MySingletonHelper extends OrmLiteSqliteOpenHelper {
    private static MySingletonHelper instance;

    public static MySingletonHelper getInstance() {
        if ( MySingletonHelper.instance == null ) {
            MySingletonHelper.instance = new MySingletonHelper();
        }

        return MySingletonHelper.instance;
    }

    private MySingletonHelper() {
        // code here...
    }

    @Override
    public void onCreate( SQLiteDatabase arg0, ConnectionSource arg1 ) {
        // code here...
    }

    @Override
    public void onUpgrade( SQLiteDatabase arg0, ConnectionSource arg1, int arg2, int arg3 ) {
        // code here...
    }
}

在此处查看更多信息:http://en.wikipedia.org/wiki/Singleton_pattern

【讨论】:

  • 是的,我明白了,这个问题是关于在销毁应用程序时你需要调用 MySingletonHelper.instance.releaseHelper();并且因为您没有使用 actyvity 的生命周期来管理助手的生命周期,所以您不知道何时发布它。对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
相关资源
最近更新 更多