情况如下,我有一个挥之不去的Realm实例,即使在我杀死应用程序之后仍然存在。这是偶然发现的,我的印象是所有未关闭的领域实例将在应用程序被杀死时关闭(而非强制停止)。如果你能对这个问题提供一些见解,我将不胜感激。
我正在调用Realm.getGlobalInstanceCount()来检查在启动应用程序和关闭应用程序时仍然打开了多少个域实例。这是在应用程序中的所有领域实例明确关闭之前和之后完成的。
以下是设备统计信息以及我正在使用的Realm版本。
其他统计数据: 领域版本3.1.4 设备:Nexus 6p仿真器Api 23
修改1:
下面是我在登录界面上调用的内容(在我实际打开实例之前),预期结果是0.但是我随机得到1或2,因为我仍然在弄清楚为什么当我关闭时发生这种情况应用。我无法提供任何理由为什么Realm在应用程序被杀时不会关闭,如果你可以插入并让我知道在什么情况下会发生这种行为我会很感激。
Log.v("test","realm instance count when starting app | calling from thread " + android.os.Process.myTid() + "| count = " + RealmController.printRealmInstanceCount());
下面的printRealmInstanceCount方法
public static int printRealmInstanceCount(){
try {
int i = Realm.getGlobalInstanceCount(getDefaultConfiguration(
SceneDocApp.getUser().getUserFolderName(),
Hex.decodeHex(SceneDocApp.getUser().getRealmDbKey().toCharArray())));
return i;
}catch(Exception e){
}
return -1;
}
下面的调用用于设置单例并保持对主线程域实例的引用。
RealmController.getInstance();
//code for above method
public static RealmController getInstance() {
if (instance == null)
{
instance = new RealmController();
try
{
Realm.setDefaultConfiguration(getDefaultConfiguration(
SceneDocApp.getUser().getUserFolderName(),
Hex.decodeHex(SceneDocApp.getUser().getRealmDbKey().toCharArray())));
if (mRealm != null && !mRealm.isClosed())
mRealm.close();
mRealm = Realm.getDefaultInstance();
}
catch (Exception e)
{
Common.makeLog(RealmController.getInstance().getClass(), e.getMessage(), Level.ERROR);
}
}
return instance;
}