android– 这个Realm实例已经关闭,使其无法使用RxJava

android– 这个Realm实例已经关闭,使其无法使用RxJava,第1张

概述首先,我通过Repository类管理realm实例:publicclassRealmRepository{privateLocklock;protectedRealmRepository(){lock=newReentrantLock();}public<T>Texecute(Executor<T>executor){Realmrealm=null;try{lock.lock

首先,我通过Repository类管理realm实例:

public class RealmRepository {private Lock lock;protected RealmRepository() {    lock = new reentrantlock();}public  <T> T execute(Executor<T> executor) {    Realm realm = null;    try {        lock.lock();        realm = Realm.getDefaultInstance();        return executor.execute(realm);    } finally {        if (realm != null && !realm.isClosed()) {            realm.close();        }        lock.unlock();    }}public interface Executor<T> {    T execute(Realm realm);}}

而且这个RealmRepository扩展的唯一类就是我的控制器类.
问题是当我第一次执行我的片段中的执行方法时,我得到了:

java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable.

但是在这个错误之后如果重载片段一切正常.在此第一个片段之前,执行方法从Services类调用并且运行良好.
例如:
即使首先执行它,此方法也能完美运行:

public Observable<ModuleRealm> getModule(String moduleTitle) {    return execute(realm -> realm.where(ModuleRealm.class)            .equalTo("code", moduleTitle)            .findAllAsync()            .asObservable()            .first()            .map(RealmResults::first));}

但是这个抛出异常:

public Observable<List<ProductcategoryRealm>> getProductCategorIEs() {    return execute(realm -> realm.where(ProductcategoryRealm.class)            .findAll()            .asObservable()            .first()            .map(realm::copyFromrealm));}

解决方法:

在初始初始化调用之后,Realm实例是引用计数.每次调用close()都会减少此引用计数,每次调用getDefaultInstance()都会增加此引用计数.一旦引用计数达到0,就释放了Realm的资源.

考虑到您正在使用Lock来阻止对Realm实例的访问,当您进行close()调用时,导致引用计数达到0,然后在Realm已释放其资源后不重新初始化Realm配置.

为了解决这个问题,您需要在后续调用close()之前调用getDefaultInstance()重叠,以确保您的引用计数保持为>当你仍在积极使用Realm时,你需要重新初始化整个Realm配置,这会对性能产生影响.

总结

以上是内存溢出为你收集整理的android – 这个Realm实例已经关闭,使其无法使用RxJava全部内容,希望文章能够帮你解决android – 这个Realm实例已经关闭,使其无法使用RxJava所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1097751.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存