我只是想知道是否有一种方法可以在 Android 上对 RealmList
进行异步排序。
假设我有一个名为 diaryEntry
的 Realm 对象,其中包含 Entry
对象的 RealmList
:
RealmList<Entry> entries;
public RealmList<Entry> getEntries() { return entries; }
如果我想对 RealmList 进行排序,我只需调用 sort 就可以了,它工作正常。
RealmResults<Entry> sortedEntries = diaryEntry.getEntries().sort("time");
mvpView.bindAndShowEntryList(sortedEntries);
上面的代码是在 Fragment 的 onResumeFragment()
方法中执行的,当 Fragment 可见时调用该方法(这是我介绍的自定义生命周期方法)在 ViewPager 中。所以很明显,如果我可以在后台对数据进行排序,并且当 fragment 变得可见时,只需将结果绑定(bind)到 View ,那就太好了。
所以我想到了下面的第二种解决方案:
entries = realm.where(Entry.class)
.equalTo("dateId", dateId)
.findAllSortedAsync("time");
注意:dateId
是一个整数,是 ViewPager
中每个 Fragment
的唯一 ID。
这样我就必须向 Entry.class 添加一个新的索引整数字段 dateId。
public class Entry extends RealmObject {
// Other fields ...
@Index
private int dateId;
我的问题:有没有办法异步排序 RealmList
?
如果不是,哪种方法可能更好?第一个排序UI 线程 上的条目,但可以即时访问包含所有相应条目的RealmList
Entry
对象(平均 10-15 个 Entry 对象)。
或者第二种方法,它必须首先通过它们的 dateId
找到所有相应的 Entry
对象,但是在不阻塞 UI 线程的情况下完成所有这些async ?
注意:每个唯一的 dateId
平均有大约 10-15 个 Entry
对象,所以如果普通用户正在使用我的应用2 年,每天添加大约 15 个条目,数据库中将有大约 11000 个 Entry
对象。这显然是一个相当高的假设,因为没有用户会每天添加条目,甚至不会添加那么多。
最佳答案
你可以这样做:
RealmResults<Entry> sortedEntries = diaryEntry.getEntries()
.where()
.findAllSortedAsync("time");
这将根据您的条目列表创建一个查询,该查询将在后台线程中执行。
关于java - RealmList 排序异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098582/