2017-11-15 2 views
2

Ich versuche, Realm in meiner App von Version 0.85 auf Version 4.1.1 zu aktualisieren. In einigen Fällen gibt realm.beginTransaction nicht zurück. Ich habe versucht, es durch Realm.executeTransaction ohne Wirkung zu ersetzen. Hier sind die ausführliche Protokolle von Realm:Android Realm openTransaction gibt nicht zurück

V/REALM_JNI: --> Java_io_realm_internal_OsSchemaInfo_nativeCreateFromList 
V/REALM_JNI: --> Java_io_realm_internal_OsRealmConfig_nativeCreate 
V/REALM_JNI: --> Java_io_realm_internal_OsRealmConfig_nativeSetInMemory -1605354496 
V/REALM_JNI: --> Java_io_realm_internal_OsRealmConfig_nativeEnableChangeNotification -1605354496 
V/REALM_JNI: --> Java_io_realm_internal_OsRealmConfig_nativeSetSchemaConfig -1605354496 
V/REALM_JNI: --> Java_io_realm_internal_SharedRealm_nativeGetSharedRealm -1605354496 
V/REALM_JNI: --> Java_io_realm_internal_SharedRealm_nativeGetSchemaInfo -1605349584 
V/REALM_JNI: --> Java_io_realm_internal_SharedRealm_nativeSetAutoRefresh -1605349584 
V/REALM_JNI: --> Java_io_realm_internal_SharedRealm_nativeRegisterSchemaChangedCallback -1605349584 
V/REALM_JNI: --> Java_io_realm_internal_SharedRealm_nativeIsClosed -1605349584 
V/REALM_JNI: --> Java_io_realm_internal_SharedRealm_nativeBeginTransaction -1605349584 

So ist es mir sieht, dass Relam stecken wird, während SharedRealm.nativeBeginTransaction Aufruf, die dem entspricht, was ich sah, als das Debuggen.

Hier ist mein Projekt build.gradle

buildscript { 
    repositories { 
     jcenter() 
     maven { url "https://jitpack.io" } 
     google() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:3.0.0' 
     classpath 'com.google.gms:google-services:3.1.0' 
     classpath ('io.realm:realm-gradle-plugin:4.1.1'){ 
      exclude group: 'com.google.guava' 
     } 
     classpath ('com.google.firebase:firebase-plugins:1.1.0'){ 
      exclude group: 'com.google.guava', module: 'guava-jdk5' 
     } 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

Und mein Modul build.gradle

apply plugin: 'com.android.application' 
apply plugin: 'com.google.firebase.firebase-crash' 
apply plugin: 'realm-android' 

// increment code and change version name on every released build 
def code = 93 
def version = "1.1.8" 

android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.2" 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_8 
     targetCompatibility JavaVersion.VERSION_1_8 
    } 



    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 26 
     versionCode code 
     versionName "$version" 

     multiDexEnabled true 
    } 

    aaptOptions { 
     additionalParameters "--no-version-vectors" 
    } 

    buildTypes { 
     release { 
      buildConfigField "boolean", "DEV", "false" 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      signingConfig signingConfigs.release 
      multiDexEnabled false 
     } 
     debug { 
      buildConfigField "boolean", "DEV", "true" 
      signingConfig signingConfigs.release 
     } 
    } 
} 

dependencies { 
    implementation fileTree(dir: 'libs', include: ['*.jar']) 
    implementation 'com.android.support:multidex:1.0.2' 
    implementation 'com.android.support:appcompat-v7:26.1.0' 
    implementation 'com.android.support:cardview-v7:26.1.0' 
    implementation 'com.android.support:customtabs:26.1.0' 
    implementation 'com.android.support:recyclerview-v7:26.1.0' 
    implementation 'com.android.support:design:26.1.0' 
    implementation 'com.google.guava:guava:23.4-android' 
    implementation 'uk.co.chrisjenx:calligraphy:2.2.0' 
    implementation 'com.makeramen:roundedimageview:2.0.1' 
    implementation 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0' 
    implementation 'com.google.android.gms:play-services-analytics:11.6.0' 
    implementation 'com.google.firebase:firebase-messaging:11.6.0' 
    implementation 'com.google.android.gms:play-services-location:11.6.0' 
    implementation 'com.google.firebase:firebase-crash:11.6.0' 
    implementation 'net.hockeyapp.android:HockeySDK:5.0.3' 
    implementation 'com.squareup.picasso:picasso:2.5.2' 
    implementation 'com.squareup.okhttp3:okhttp:3.9.0' 
    implementation 'com.squareup.okio:okio:1.13.0' 
    implementation 'com.squareup:otto:1.3.8' 
    implementation 'com.google.code.gson:gson:2.8.2' 
    implementation 'com.github.JakeWharton:ViewPagerIndicator:2.4.1' 
    implementation 'com.facebook.android:facebook-android-sdk:4.28.0' 
} 

apply plugin: 'com.google.gms.google-services' 

Ich bin mit Android Studio 3.0 und hatte D8 zu ermöglichen, für den Aufbau

Jede Idee über was passiert?

+1

'realem.beginTransaction()' wird nicht zurückgegeben, wenn es durch eine Schreib-Transaktion, die auf einem anderen Thread zur gleichen Zeit auftritt, blockiert wird. – EpicPandaForce

+0

Bedeutet das, dass dies in früheren Versionen von Realm nicht der Fall war? –

+0

Nun, technisch sollte es haben, obwohl es nicht über Prozesse blockiert wurde (was zu undefiniertem Verhalten führen könnte). Eine Möglichkeit besteht darin, dass die Benachrichtigungen in Ihrem Schema etwas langsam ausgewertet werden, was behoben werden kann, indem eine bidirektionale Verknüpfung entfernt und durch @LinkingObjects ersetzt wird. – EpicPandaForce

Antwort

0

Problem ist aufgetreten, da realem.beginTransaction() nicht zurückgibt, wenn es von einer Schreibtransaktion blockiert wird, die gleichzeitig in einem anderen Thread auftritt. In meinem Fall war dies auf einen Aufruf von RealmResults.clear() zurückzuführen. Es wurde behoben, indem es durch deleteAllFromRealm() ersetzt wurde