当我询问很多因素的UI获得冻结。Android的境界findAllAsync()冻结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()方法的另一种方法。
谢谢。
你使用的是什么境界版本? – beeender
您的用户界面会冻结,因为您的映射逻辑发生在用户界面线程上,并针对每个元素进行评估 - 这不是因为Realm速度慢。 Realm的设计不是让每一个元素都在循环中读取;这就是为什么默认情况下,'RealmResults'只是一个懒惰加载的“游标”,它为您提供延迟加载的代理 – EpicPandaForce
,所以解决方法是修改代码的方式为'tvList.add(prepareTV(TVRealm.toTV(tvRealm ),真));'不会在那里,只是使用'TVRealm'直接 – EpicPandaForce