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

Tay*_*Lee 1 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我真的很想知道它们之间的区别!getInMemoreyDatabase是否比Room.databaseBuilder运行得更快?

Nav*_*T P 8

inMemoryDatabaseBuilder():数据库将在系统内存中创建,如果您终止了该应用程序(杀死进程),则数据库将被删除并且数据将不会持久保存。可以在测试时使用

databaseBuilder():将在其中创建数据库/data/data/com.your.app并将其持久化。您将在生产中使用它


Nil*_*hod 1

databaseBuilder()

  • 创建一个RoomDatabase.Builder持久数据库。一旦建立了数据库,您应该保留对它的引用并重新使用它。
  • 返回RoomDatabaseBuilder<T>可用于创建数据库的 A。

inMemoryDatabaseBuilder()

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