领域3.5.0
我在MyApp中添加了领域。
这里的片段:
public class MainApp extends MultiDexApplication {
private void setRealmDefaultSyncConfiguration(SyncUser syncUser, String realmURL) {
SyncConfiguration sync = new SyncConfiguration.Builder(syncUser, realmURL).build();
Realm.setDefaultConfiguration(sync );
if (BuildConfig.DEBUG)
Log.d(TAG, "setRealmDefaultSyncConfiguration: SUCCESS SET REALM DEFAULT CONFIGURATION:"
+ "\nThreadSignature = " + AndroidUtil.getThreadSignature()
+ "\nsyncUser = " + syncUser
+ "\nrealmURL = " + realmURL
+ "\nRealm = " + Realm.getDefaultInstance()
+ "\nRealmget. DefaultConfiguration:\n\n" + Realm.getDefaultInstance().getConfiguration() + "\n\n"
);
}
}下面是logcat数据:
setRealmDefaultSyncConfiguration: SUCCESS SET REALM DEFAULT CONFIGURATION:
Thread=main: id=1, priority=5, group=main
syncUser = {UserId: 32afeeeeeeeeeeeeeeee3c63f5606c4b, AuthUrl: http://172.12.11.90:9080/auth, IsValid: true, Sessions: 0}
realmURL = realm://172.12.11.90:9080/fccc46ssssssssssssssssb9e828700c/db
Realm = io.realm.Realm@4225bd68
Realmget. DefaultConfiguration:
realmDirectory: /data/data/com.myproject/files/realm-object-server/32afeeeee/fccc46bbe2354bae35d3ddb9e828700c
realmFileName : db
canonicalPath: /data/data/com.myproject/files/realm-object-server/32afeeeee3f5606c4b/fccc46ssssssssssssssssb9e828700c/db
key: [length: 0]
schemaVersion: 0
migration: null
deleteRealmIfMigrationNeeded: false
durability: FULL
schemaMediator: io.realm.DefaultRealmModuleMediator@42136c40
readOnly: false
compactOnLaunch: null
serverUrl: realm://172.12.11.90:9080/fccc46ssssssssssssssssb9e828700c/db
user: {UserId: 32afeeeeeeeeeeeeeeee3c63f5606c4b,
AuthUrl: http://172.12.11.90:9080/auth, IsValid: true, Sessions: 0}
errorHandler: io.realm.SyncManager$1@42068038
deleteRealmOnLogout: false
waitForInitialRemoteData: true正如您可以在“主”线程上的create中看到的那样。
PersonFragment代码:
public class PersonsFragment extends Fragment {
private Realm realm;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.organizations_fragment, container, false);
realm = Realm.getDefaultInstance();
return rootView;
}
@Override
public void onDestroy() {
super.onDestroy();
if (BuildConfig.DEBUG)
Log.d(TAG, "onDestroy():"
+ "\nThreadSignature=" + AndroidUtil.getThreadSignature()
+ "\nRealm global instance=" + Realm.getGlobalInstanceCount(Realm.getDefaultConfiguration())
+ "\nrealm=" + realm);
realm.close();
if (BuildConfig.DEBUG)
Log.d(TAG, "onDestroy():"
+ "\nThreadSignature=" + AndroidUtil.getThreadSignature()
+ "\nrealm.isClosed()=" + realm.isClosed()
+ "\nRealm global instance=" + Realm.getGlobalInstanceCount(Realm.getDefaultConfiguration())
);
}
}我的碎片的逻辑猫:
PersonsFragment(18573):onDestroy():
PersonsFragment(18573):Thread=main:id=1,priority=5,group=main
PersonsFragment(18573):Realm global instance = 1
PersonsFragment(18573):realm = io.realm.Realm@4225bd68
PersonsFragment(18573):onDestroy():
PersonsFragment(18573):Thread=main:id=1,priority=5,group=main
PersonsFragment(18573):realm.isClosed() = false
PersonsFragment(18573):Realm global instance = 1如您所见,isClose()仍然是false,而领域全局实例总是= 1,而且领域实例是在主线程上创建的。
发布于 2017-08-17 07:41:36
更新我刚刚发现了这个问题这里
或者你可以跟着这个-
你可以试试这个,从这个问题中学到的东西。您可能打开了多个领域实例,在不同的线程上,您可以尝试使用下面的代码关闭onDestroy()中的每个领域实例-
while(!realm.isClosed()) realm.close();然后检查isClosed()是否返回true。
另外,要以更好的方式处理不同线程上的领域实例,可以遵循@Zhuinden的方法-
try(Realm realm = Realm.getDefaultInstance()) {
// use realm
} // auto-close或者关闭finally块中的领域实例。
如果你还需要帮助,请告诉我。
https://stackoverflow.com/questions/45728917
复制相似问题