ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-如何跨线程传输RealmResults

2019-10-26 06:24:22  阅读:180  来源: 互联网

标签:realm android


我在我的应用程序中使用了回收站视图,并希望在后台线程上进行一些计算,获取RealmObjects的列表,然后将其刷新为适配器.

作为背景知识,我对排序有一个微不足道的要求,并且回收者视图需要显示在不同表上查询产生的对象(尽管它们仍然产生相同的对象类型).我不想在主线程上执行这些潜在的昂贵查询.

做这个的最好方式是什么? AFAIK,我可以

>从后台线程获取ids(String)列表,并在主线程上进行查询.所以我会做一些诸如realm.where(ObjectA.class).in(listOfIds).findAll()的操作.但是,我不保证集合的顺序是我在后台排序的listOfIds的顺序.然后,我可以手动对领域集合进行排序.
>或者,假设我已经从后台线程获得了对象列表,那么我可以执行realm.copyFromRealm(listOfObjectA).通过这种方式,我感觉更干净,但是我显然失去了自动刷新功能,更不用说它将占用大量内存.似乎昂贵的复制将在主线程上进行,这将破坏我将内容移入后台线程的工作.

我希望有一种方法可以将RealmResults或RealmList从一个线程转移到另一个线程.有没有人对如何做到这一点有建议?

解决方法:

findAllSortedAsync

I have a non trivial sorting requirement

如果此排序纯粹基于您的RealmObject字段,则可以使用RealmQuery.findAllSortedAsync(…)方法,该方法将在单独的工作线程上执行查询和排序.这是最好的选择.如果可能的话,您还可以分两个阶段进行排序,一个阶段使用findAllSortedAsync,第二个阶段在已获得对象的主线程上进行-如果结果按领域进行预排序,第二阶段的成本可能不会那么高.

and the recycler view needs to display objects that result from queries on different tables

您可以寻找在这些对象之间创建链接的可能性,例如,如果RealmObject A具有字段b,则还可以按b的字段对A进行排序-这样可以解决您的问题,并将所有内容保留在一个领域查询中.

用已排序的ID重新查询(否)

Get a list of ids(String) from the background thread, and do a query on the main thread…

您是对的-无法保证以原始ID列表的顺序返回结果,因此,这不是真正的选择.

copyFromRealm

Or, I can do a realm.copyFromRealm(listOfObjectA)…

没错,但是您必须知道使用此方法的局限性和内存开销,即:

>您将获得数据快照,并且必须使用新快照手动更新回收站
>对符合原始查询的对象的单个更改将触发更新,并且有可能再次重新排序

It seems that the expensive copying would take place on the main thread, which would undermine my efforts to move things into the background thread.

并非如此,如果您在线程A上执行copyFromRealm并将列表传递给线程B,则将由线程A执行从领域的值的硬拷贝,因此很好.

标签:realm,android
来源: https://codeday.me/bug/20191026/1934507.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有