将Room DB与Rx一起使用时CursorWindowAllocation异常

时间:2019-05-06 07:22:27

标签: java android

我在android中使用Room database,并且在我正在使用Rx的后台线程上执行查询。来自Rx的回调根据需要在主线程或IO线程上返回。但是,有时CursorWindowAllocationException会抛出Room。我没有直接使用游标。它由房间本身处理。任何帮助将不胜感激。

我无法尝试任何事情,因为我对这个问题一无所知。我注意到,当有大量数据时,就会发生此问题。但是,我不确定100%。

@Dao
public interface ContentDao {
  @Insert
  long insertContent(ContentModel contentModel);

  @Query("SELECT * FROM " + DBConstant.CONTENT_TABLE)
  List<ContentModel> getContentDetail();
}

Executing Query:

if (isCallbackRequiredOnMainThread) {
      Single.just(1)
          .subscribeOn(Schedulers.IO())
          .map(i -> {
            //Executing Query
            return data == null ? nullD : data;
          }).observeOn(AndroidSchedulers.mainThread())
          .subscribe(data -> dDbCallback.onDbDataReceived(data));
    } else {
      Single.just(1)
          .subscribeOn(Schedulers.IO())
          .map(i -> {
            //Executing Query
            return data == null ? nullD : data;
          }).subscribe(data -> dDbCallback.onDbDataReceived(data));
    }
  }

1 个答案:

答案 0 :(得分:0)

事实证明,问题出在RxJava的.subscribeOn(Schedulers.io())中,用于RxJava Room适配器中的Flowable响应。显然,它正在启动线程,但从未释放它们。您需要增加线程数以明显地消除错误