- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在我的应用程序中使用回收器 View ,并想在后台线程上进行一些计算,获取 RealmObjects 列表,并根据它刷新我的适配器。
作为一些背景知识,我有一个重要的排序要求,并且回收器 View 需要显示从不同表上的查询产生的对象(尽管它们仍然产生相同的对象类型)。我不想在主线程上执行这些可能代价高昂的查询。
最好的方法是什么?据我所知,我可以
从后台线程获取 ids(String) 列表,并在主线程上进行查询。所以我会做类似 realm.where(ObjectA.class).in(listOfIds).findAll()
的事情。但是,我认为我不能保证集合的顺序是我在后台排序的 listOfIds 的顺序。然后我可以手动对 Realm 集合进行排序。
或者,我可以执行 realm.copyFromRealm(listOfObjectA)
,假设我已经从我的后台线程中获得了一个对象列表。通过这种方式,我感觉更干净,但我显然失去了自动刷新功能,更不用说它会占用大量内存。似乎昂贵的复制将发生在主线程上,这会破坏我将内容移至后台线程的努力。
我希望有一种方法可以让我将 RealmResults 或 RealmList 从一个线程传输到另一个线程。有人对如何执行此操作有建议吗?
最佳答案
I have a non trivial sorting requirement
如果此排序纯粹基于您的 RealmObject 字段,您可以使用 RealmQuery.findAllSortedAsync(...)
方法,该方法将为您执行查询和排序在一个单独的工作线程上。这是最好的选择。如果可能的话,您还可以分两个阶段进行排序,一个使用 findAllSortedAsync
,第二个在主线程上对已经获得的对象进行排序 - 如果结果是预先排序的,第二阶段可能不会那么昂贵按 Realm 。
and the recycler view needs to display objects that result from queries on different tables
您可以寻找在这些对象之间创建链接的可能性,例如,如果 RealmObject A 有一个字段 b,您可以对 A 通过 b 的字段 - 这可以解决您的问题,并将所有内容保存在一个 Realm 查询中。
Get a list of ids(String) from the background thread, and do a query on the main thread...
你是对的 - 不能保证结果按原始 ID 列表顺序返回,所以这不是一个真正的选择。
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,则从 realm 硬拷贝值将由线程 A 执行,所以没问题。
关于android - 如何跨线程传递 RealmResults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42657868/
我有一个 Realm 数据库,其中字段 postCategories 包含通过 JSON 从服务器获取的随机字符串类型数据。这些字符串值看起来类似于以下内容: Semester - I, Market
我有一个项目,我请求获取一些对象。这是我进行一些测试后最快的实现,但我觉得我错过了一些东西。我的数据库中有 2000 个对象用于测试,计算之前的代码需要 3.25 秒才能执行。 val all
我在我的代码中收到以下警告。 Unchecked assignment: 'io.realm.RealmResults' to 'io.realm.RealmResults' 我在DBManager中
我有一个小问题,我找不到任何结果。是的,我也做了一些研究。 我有一个变量 mResults = RealmResults ; 这有数据,如下图所示 但是当我输入 >>mResults.size = m
处理日期和时间时如何修改realm结果数据? ASCENDING 和 DESCENDING 对我来说还不够。 例如,我要完成一个小时内到期的任务? RealmResults tmp = realm.
我在我的应用程序中使用回收器 View ,并想在后台线程上进行一些计算,获取 RealmObjects 列表,并根据它刷新我的适配器。 作为一些背景知识,我有一个重要的排序要求,并且回收器 View
我有两个模型(具有相关属性)如下所示: 播放列表.java @PrimaryKey String id; String name; RealmList songs; 歌曲.java @PrimaryK
@Override public boolean onItemMove(int fromPosition, int toPosition) { RealmList results = new
我在 RealmResults 中有大约 20 行,需要使用最近的日期对列表进行排序 RealmConfiguration realmConfig = new RealmConfiguration.B
我正在尝试创建一个搜索引擎来显示包含不同标签的结果。结果必须按相关性排序。 假设我有以下型号: public class Article extends RealmObject{ @Prima
我有自定义类型Playlist的RealmResult。每个 Playlist 都有一个归档的 playlistTypeId,可以是 1、2 或 3。我想按以下方式对 RealmResult 中的对象
我需要对 String 的列表进行排序这实际上是很大的数字(必须使用它,因为 Realm 不支持 BigInteger) RealmResults leaderboardList = realm.wh
我想问一下将 RealmResults 传递给 RecyclerView Adapter 是否安全。像这样: public MyAdapter(Context context, RealmRe
我正在开发一个商店应用程序,每个用户都可以在其中销售商品,也可以将其他用户销售的商品添加到他的愿望 list 中。 现在在用户个人资料中,我想显示他添加到他的愿望 list 中的所有项目。 我的类(c
我有一个场景,我有一个不同 ID 的 ArrayList。现在每个 id 在数据库中都有多条记录,最终结果应该是一个包含这些 id 的所有记录的列表。有什么办法可以将它们全部组合到一个 RealmRe
RealmQuery和RealmResult有什么区别? 更具体地说: 在 RealmQuery 上,我可以使用 equalTo 进行过滤,但我必须将属性名称作为 String 传递,这很容易出错.
我有一行返回带有一些排序数据的 RealmResult。 我想以最快最简单的方式删除所有这些项目。例如: RealmResults currentElements = realm.where(Elem
有一些字段用于存储日期。一些字段有一个日期,而一些字段是空的(没有日期)。我需要以这样一种方式进行排序,即在列表的开头有按升序排列的带有 date 的字段。在列表的末尾,有些字段没有日期。 正常排序会
我是 Realm 的新手,我有一个问题。 我能够使用 Realm 进行一些写入。问题是当我尝试使用 获取 RealmResults 时 mResults = mRealm.where(Player.c
我有一个 RealmResults 对象,它保存 .where.findAll() 查询的输出。我在 RecyclerView 中显示此对象的内容,但由于 RealmResults 对象的内容是静态的
我是一名优秀的程序员,十分优秀!