room数据库,inMemoryDatabaseBuilder和databaseBuilder有什么区别?

时间:2018-06-16 09:23:14

标签: android android-sqlite android-room

我们可以通过两种方法获得数据库抛出

 /**
 * Copyright:MyApplication
 * Author: liyang <br>
 * Date:2018/6/15 下午5:07<br>
 * Desc: <br>
 */
@Database(entities = {Pet.class ,User.class}, version = 1)
public abstract class RoomDb extends RoomDatabase {
    private static RoomDb INSTANCE;

    private static final Object sLock = new Object();

    public abstract UserDao getUserDao();

    public abstract PetDao getPetDao();

    public static RoomDb getInstance(Context context) {
        if (INSTANCE == null) {
            synchronized (sLock) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),RoomDb.class,"Sample.db").build();
                }
            }
        }
        return INSTANCE;
    }
    public static RoomDb getInMemoreyDatabase(Context context){
        if (INSTANCE == null) {
            synchronized (sLock) {
                if (INSTANCE == null) {
                    INSTANCE = Room.inMemoryDatabaseBuilder(context.getApplicationContext(),RoomDb.class).build();
                }
            }
        }
        return INSTANCE;
    }
}

但我真的想知道他们之间的区别是什么! getInMemoreyDatabase的运行速度是否高于Room.databaseBuilder?

3 个答案:

答案 0 :(得分:3)

inMemoryDatabaseBuilder():数据库将在系统内存中创建,如果您终止应用程序(杀死您的进程),将删除数据库并且不会保留数据。这可以在测试

时使用

databaseBuilder():数据库将在/data/data/com.your.app中创建,并将保留。您将在生产

中使用它

答案 1 :(得分:1)

  

databaseBuilder()

  • 为持久数据库创建RoomDatabase.Builder。构建数据库后,应该保留对它的引用并重新使用它。
  • 返回 可用于创建数据库的RoomDatabaseBuilder<T>
  

inMemoryDatabaseBuilder()

  • 为内存数据库创建RoomDatabase.Builder。存储在内存数据库中的信息在进程被终止时消失。构建数据库后,应该保留对它的引用并重新使用它。
  • 返回 可用于创建数据库的RoomDatabaseBuilder<T>

答案 2 :(得分:1)

inMemoryDatabaseBuilder()将临时构建数据库。数据库将驻留在系统内存中,并且一旦进程被终止就会被销毁。

<强> databaseBuilder() 它将永久构建数据库,数据库将存储在/ data / data / ....文件夹中。