当我查询很多元素时,UI会被冻结。
realm.where(TVRealm.class).equalTo("favorite", true).findAllAsync()
.addChangeListener(new RealmChangeListener<RealmResults<TVRealm>>() {
@Override
public void onChange(RealmResults<TVRealm> element) {
List<TV> tvList = new ArrayList<>();
for (TVRealm tvRealm : element) {
tvList.add(prepareTV(TVRealm.toTV(tvRealm), true));
}
listener.onDataChange(tvList);
}
});
我认为findAllAsync()将在其他线程上运行并避免问题但不是。 有谁知道如何避免这个问题?也许没有使用findAllAsync()方法还有另一种方法。
感谢。
答案 0 :(得分:2)
根据官方Realm
文档,findAllAsync
在后台主题中工作。
https://realm.io/docs/java/latest/#asynchronous-queries
我认为您的数据经常更改,因此您经常尝试通知ui。所以你要阻止你。我猜您正在通过RecyclerView
方法通知onDataChange
适配器。
此外,如果您的结果列表包含太多项目,那么每次数据更改时,探索结果并将项目添加到新列表可能会阻止ui。
答案 1 :(得分:1)
如果我没有犯错误,当RealmResults正在更新时,对于每个更改,您都可以使用新模型和更新UI创建新集合。尝试在另一个主题中调用findAll()
,将结果映射到电视,并将完成的电视列表发布到UI线程。
答案 2 :(得分:0)
为什么不尝试这个
RealmResult<item> res=realm.where(item.class).where("name","sanjay").findAll();
它将一次获取所有数据。