Wenn ich viele Elemente abfragen die Benutzeroberfläche einfrieren.Android Realm findAllAsync() einfrieren 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);
}
});
Ich dachte, dass findAllAsync() auf anderen Thread ausgeführt wird und das Problem vermeiden, aber nicht. Weiß jemand, wie man dieses Problem vermeidet? Vielleicht gibt es einen anderen Weg, ohne findAllAsync() -Methode zu verwenden.
Danke.
Welche Realm-Version verwenden Sie? – beeender
Ihre Benutzeroberfläche reagiert nicht mehr, da Ihre Zuordnungslogik im UI-Thread stattfindet und für jedes einzelne Element ausgewertet wird - nicht, weil Realm langsam ist. Realm wurde nicht dafür entworfen, jedes einzelne Element in einer Schleife lesen zu lassen; Deshalb ist "RealmResults" standardmäßig nur ein "lazy-loaded" -Cursor, der Ihnen Lazy-Loaded-Proxies – EpicPandaForce
gibt, so dass die Lösung darin besteht, Ihren Code so zu überarbeiten, dass 'tvList.add (prepareTV (TVRealm.toTV (tvRealm), wahr)); 'wird nicht da sein und einfach' TVRealm' direkt verwenden – EpicPandaForce