RealmList排序异步?

时间:2017-05-21 15:28:20

标签: java android realm

我只是想知道是否有办法在Android上异步排序RealmList

假设我有一个名为diaryEntry的领域对象,其中包含RealmListEntry个对象:

RealmList<Entry> entries;
public RealmList<Entry> getEntries() { return entries; }

如果我想对RealmList进行排序,我只需调用sort就可以了,它可以正常工作。

RealmResults<Entry> sortedEntries = diaryEntry.getEntries().sort("time");
mvpView.bindAndShowEntryList(sortedEntries);

然而,上面的代码是在Fragment的onResumeFragment()方法中执行的,当片段中变为可见(这是我引入的自定义生命周期方法)时会被调用ViewPager 即可。所以很明显,如果我可以在后台对数据进行排序以及片段何时可​​见,只需将结果绑定到视图即可。

所以我想出了下面的第二个解决方案:

entries = realm.where(Entry.class)
                .equalTo("dateId", dateId)
                .findAllSortedAsync("time");

注意:dateId是一个整数,对于Fragment中的每个ViewPager都是唯一ID 。 这样我就不得不在Entry.class中添加一个新的索引整数字段dateId。

public class Entry extends RealmObject {
    // Other fields ...
    @Index
    private int dateId;

我的问题:有没有办法异步排序RealmList? 如果没有,哪种方法可能更好?第一个 排序 UI主题上的条目但可以即时访问包含所有相应{{1}的RealmList对象(平均10-15个Entry对象)。 或者第二种方法,必须首先通过Entry找到所有相应的Entry对象,但是在不阻止UI线程的情况下完成所有 async

注意:对于每个唯一的dateId,平均有大约10-15个Entry个对象,因此如果普通用户使用我的应用程序2年并添加了每天有15个条目,数据库中将有大约11000个dateId个对象。这显然是一个相当高的假设,因为没有用户会每天添加条目,甚至没有那么多。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

RealmResults<Entry> sortedEntries = diaryEntry.getEntries()
            .where()
            .findAllSortedAsync("time");

这将根据您的条目列表创建一个查询,查询将在后台线程中执行。