android – 使用Singleton设计模式正确打开/关闭数据库

我正在创建一个数据库进行大量交互的应用程序(读写操作).

为了避免在每个请求中打开/关闭操作,我创建了一个使用Singleton设计模式扩展sqliteOpenHelper的类.这样,我确定只有一个sqliteOpenHelper实例,并且在所有应用程序生命周期(而不仅仅是活动生命周期)中只有一个数据库的连接.

我也读了一些关于ContentProvider的文章,但我不知道这是一个更好的方法.

所以,这是我的Singleton类的主要逻辑(onCreate和onUpgrade删除):

public final class Basesqlite extends sqliteOpenHelper {

    private static Basesqlite mInstance = null;

    private sqliteDatabase db = null;

    public static Basesqlite getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new Basesqlite(context.getApplicationContext(),dbnAME,DBVERSION);
        }
        return mInstance;
    }

    private Basesqlite(final Context context,final String name,final int version) {
        super(context,name,null,version);
        db = getWritableDatabase();
    }

    @Override
    public synchronized void close() {
        if (mInstance != null)
            db.close();
    }

    public Cursor getAllData() {
        String buildsql = "SELECT * FROM myTable";

        return db.rawQuery(buildsql,null);
    }

}

所以,要访问我的数据库,我做了:

Basesqlite basesqlite = Basesqlite.getInstance(context);
basesqlite.getAllData();

它现在工作完美.但我的问题是关于close()方法.我真的不知道什么时候打电话.实际上,我的数据库实例对于我的应用程序的每个Activies都是一样的,所以我认为在onPause()方法调用close()是一个坏主意,因为实例将会在( onStart()方法的下一个Activity.此外,我无法检测到我的应用程序的结束,即当屏幕上没有任何活动可见时.

有人可以给我一些关于这个问题的帮助吗?当数据库与ONE活动相关联时,我发现了一些答案,但对我的情况没有提供任何真正的提示.

解决方法

您完成写入数据库的任何时间都应该调用close.例如,当您插入数据时,您将有一个打开的连接到数据库,完成后应该关闭.

阅读是不同的.当您在手机上创建sqlite数据库时,数据是持久的.数据库存在,您创建的处理程序提供了访问该信息的便捷方式.读取数据库通常通过获取数据库的可读实例并使用Cursor来提取值来进行.在这种情况下,您完成后关闭光标,而不是数据库本身.

你是对的,你不应该在单独的活动的生命周期方法关闭数据库连接.相反,如上所述,在执行该事务完成后,关闭在处理程序的方法中写入数据库数据库连接.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...