【问题标题】:Will making a SQLiteOpenHelper class a singleton make it Thread safe?将 SQLiteOpenHelper 类设为单例会使其线程安全吗?
【发布时间】:2016-09-18 18:04:39
【问题描述】:

我正在创建一个包含三个线程的服务:

  • GPS 位置跟踪器,将位置值写入数据库。
  • 读写数据库的发送线程。
  • 也读写数据库的接收线程。

现在我看到像these 这样的帖子,据说只有一个 Helper 类应该可用,并且只能在 DB 连接上使用。我试图通过使用单例模式仅实现 Helper 类的一个实例,但是对于如何创建一个可以实现我前面提到的三个任务的 DB 连接,我完全感到困惑。这是我对 Helper 类的实现。

package com.example.userpc.roadtracker;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
  * Created by USER PC on 5/21/2016.
*/
public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME="location_service.db";
    private static final int VERSION=1;
    private static final String DB_CREATE="CREATE TABLE `location_service`.`location` ( `id` INT NOT NULL AUTO_INCREMENT , `longitude` DOUBLE NOT NULL , `latitude` DOUBLE NOT NULL , PRIMARY KEY (`id`), UNIQUE (`longitude`, `latitude`)) ENGINE = MyISAM;";

    private static SQLiteDatabase mDatabase=null;
    private static DatabaseHelper mDatabaseHelper=null;

    private DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }

    public static DatabaseHelper getInstance(Context context)
    {
        if(mDatabaseHelper==null)
             return new DatabaseHelper(context);
        else
             return mDatabaseHelper;
    }

    public SQLiteDatabase getUsableDataBase()
    {
        if(mDatabase==null)
            return this.getWritableDatabase();
        else
            return mDatabase;
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(DB_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

提前致谢。

【问题讨论】:

    标签: java android multithreading sqlite singleton


    【解决方案1】:

    不,您仍然需要同步访问 SQLiteOpenHelper 实例的代码块。

    这将是一个带有 Singleton 的单个实例,但这并不意味着 2 个线程不能访问同一个实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多