当用户从商店更新 Android 应用程序时,Realm 数据库会发生什么情况?

What happens to Realm database when the user updates the Android app from the store?

我想知道当用户更新 Android 应用程序时 Realm 会发生什么。 我有一个 Android 应用程序,其中包含一些从 RealmObject 扩展而来的 classes。我用它们来保存我的应用程序中的信息。 问题是,当我将新的 classes 定义为 RealmObject,并且我直接从 Android Studio 运行 应用程序时,应用程序崩溃了:The MyRealmClass class 在此领域的架构中缺失。 必须先卸载之前的版本,然后运行应用才能解决。

当用户从 Play 商店更新应用程序并且新版本有新的 Realm classes 时会发生什么? 应用程序会崩溃吗?如果有,有什么办法可以解决吗?

谢谢!

是的,应用程序会崩溃。您需要添加一个 RealmMigration class.

public class CustomMigration implements RealmMigration {
   @Override
   public long migrate(DynamicRealm realm, long oldVersion, long newVersion) {
     RealmSchema schema = realm.getSchema();

     if (oldVersion == 0) {
       // Migrate from v0 to v1

       schema.create("myNewTable"); // example

       oldVersion++;
     }

     if (oldVersion == 1) {
       // Migrate from v1 to v2
       oldVersion++;
     }

     if (oldVersion < newVersion) {
         throw new IllegalStateException(String.format(Locale.US, "Migration missing from v%d to v%d", oldVersion, newVersion));
     }
   }
 }

RealmConfiguration config = new RealmConfiguration.Builder(context)
    .schemaVersion(2)
    .migration(new MyMigration())
    .build();

Realm.setDefaultConfiguration(config);

// This will automatically trigger the migration if needed
Realm realm = Realm.getDefaultInstance();