Android io.realm.exceptions.RealmError:不可恢复的错误。mmap()失败:io_realm_internal_SharedGroup.cpp第115行内存不足

Android io.realm.exceptions.RealmError:不可恢复的错误。mmap()失败:io_realm_internal_SharedGroup.cpp第115行内存不足,android,realm,Android,Realm,我有一个聊天应用程序,其历史缓存在RxJava operators包装的领域数据库中。 一切正常,但我有时会在一组特定的设备上发现此异常: io.realm.exceptions.RealmError:不可恢复的错误。mmap()失败:io_realm_internal_SharedGroup.cpp第115行内存不足 位于io.realm.internal.SharedGroup.createNativeWithImplicitTransactions(SharedGroup.java) 位于

我有一个聊天应用程序,其历史缓存在RxJava operators包装的领域数据库中。 一切正常,但我有时会在一组特定的设备上发现此异常:

io.realm.exceptions.RealmError:不可恢复的错误。mmap()失败:io_realm_internal_SharedGroup.cpp第115行内存不足
位于io.realm.internal.SharedGroup.createNativeWithImplicitTransactions(SharedGroup.java)
位于io.realm.internal.SharedGroup。(SharedGroup.java:60)
位于io.realm.realm.(realm.java:209)
在io.realm.realm.createAndValidate(realm.java:600)上
创建(realm.java:563)
位于io.realm.realm.getInstance(realm.java:410)
位于io.realm.realm.getInstance(realm.java:367)
位于io.realm.realm.getInstance(realm.java:348)
在ru.ltst.happer.data.rx.OnSubscribeRealm.call(OnSubscribeRealm.java:28)
在ru.ltst.happer.data.rx.OnSubscribeRealm.call(OnSubscribeRealm.java:13)
at rx.Observable.unsafeSubscribe(Observable.java:7495)
在rx.internal.operators.operatorSubscribeeon$1.call(operatorSubscribeeon.java:62)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
位于java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:818)
我将聊天信息写入数据库的代码:

public void addMessagesToDb(List<UIMessage> messages) {
    final ArrayList<UIMessage> receivedMessages = new ArrayList<>(messages);
    Observable.create(new OnSubscribeRealm<RealmMessage>(application, databaseName) {
        @Override
        public RealmMessage get(Realm realm) {
            for (UIMessage message : receivedMessages) {
                RealmMessage realmMessage = new RealmMessage();
                realmMessage.setTimeMillis(message.timeMillis());
                realmMessage.setText(message.text());
                realmMessage.setPhotoUrl(message.photoUrl());
                realmMessage.setFromOutside(message.fromOutside());
                RealmDialog.addMessage(realm, message.userId(), RealmMessage.put(realm, realmMessage));
            }
            return new RealmMessage();
        }
    }).compose(this.<RealmMessage>applySchedulers())
            .subscribe(new WeakSubscriberDecorator<>(new SimpleSubscriber<RealmMessage>()));

我在后台线程上进行了所有查询,并试图在提交事务后关闭所有
Realm
实例。此错误大多数发生在三星G900H设备上

一个领域实例有多少不同的线程?如果此类线程在域中长时间处于只读状态(无事务),这一点尤其重要。我在线程中遇到了相同的错误和所有事务进程,30分钟后它最终崩溃,并且提到的错误出现在logcat中?需要帮助吗?你得到帮助了吗
public abstract class OnSubscribeRealm<T extends RealmObject> implements Observable.OnSubscribe<T> {
    private Context context;
    private String fileName;

    public OnSubscribeRealm(Context context) {
        this(context, null);
    }

    public OnSubscribeRealm(Context context, String fileName) {
        this.context = context.getApplicationContext();
        this.fileName = fileName;
    }

    @Override
    public void call(final Subscriber<? super T> subscriber) {
        final Realm realm = Realm.getInstance(context);

        T object;
        try {
            realm.beginTransaction();
            object = get(realm);
            realm.commitTransaction();
        } catch (RuntimeException e) {
            realm.cancelTransaction();
            subscriber.onError(new RealmException("Error during transaction.", e));
            return;
        } catch (Error e) {
            realm.cancelTransaction();
            subscriber.onError(e);
            return;
        }
        if (object != null) {
            subscriber.onNext(object);
        }
        subscriber.onCompleted();

        try {
            realm.close();
        } catch (RealmException ex) {
            subscriber.onError(ex);
        }
    }

    public abstract T get(Realm realm);
}
public static RealmMessage addMessage(Realm realm, String userId, RealmMessage realmMessage) {
    RealmDialog realmDialog = findBy(realm, userId);
    if (realmDialog != null) {
        RealmMessage result = RealmMessage.put(realm, realmMessage);
        realmDialog.getMessages().add(result);
        return result;
    }
    return null;
}