GreenDAO 3.0.0 以及之后的版本中,RxQuery 的释放需要注意以下几点:
-
取消订阅:为避免内存泄漏,RxQuery 需要在不需要的时候进行取消订阅(unsubscrible),例如在 Activity 或 Fragment 的
onDestroy
方法中取消订阅:@Override protected void onDestroy() { super.onDestroy(); if (subscription != null && !subscription.isUnsubscribed()) { subscription.unsubscribe(); } }
-
RxQuery 释放:RxQuery 对象不会在 onDestroy 时自动释放,需要手动进行释放,建议在取消订阅后立即释放:
Subscription subscription = userDao .queryBuilder() .rx() .list() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(//其他代码); if (subscription != null && !subscription.isUnsubscribed()) { ((RxQuery<?>) ((SubscriptionList) subscription).get(0)).getQuery().getDao().detachAll(); }
-
使用 SubscriptionList:当一个 SubscriptionList 被取消订阅时,它会自动释放所有的 RxQuery 对象。建议在多个 RxQuery 中使用一个 SubscriptionList 来进行订阅,以方便进行取消订阅和释放:
SubscriptionList subscriptionList = new SubscriptionList(); subscriptionList.add(userDao.queryBuilder().rx().list().subscribe()); //添加订阅 //其他的 RxQuery 订阅 //... subscriptionList.unsubscribe(); //取消订阅并释放 RxQuery
以上是 GreenDAO 3.0.0 及之后版本中 RxQuery 的释放方法。