- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我查询大量元素时,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);
}
});
我认为 findAllAsync() 将在其他线程上运行并避免该问题,但事实并非如此。有谁知道如何避免这个问题?也许还有另一种不使用 findAllAsync() 方法的方法。
谢谢。
最佳答案
根据官方 Realm
文档,findAllAsync
在后台线程中工作。 https://realm.io/docs/java/latest/#asynchronous-queries
我认为您的数据变化太频繁,因此您尝试通知 ui 的频率太高。所以你阻止了ui。我猜您是在 onDataChange
方法中通知 RecyclerView
适配器。
此外,如果您的结果列表包含太多项目,每次当您的数据发生变化时,探索结果并将项目添加到新列表可能会阻塞 ui。
关于Android Realm findAllAsync() 卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43379142/
我是 Realm 的新手,我有一个问题。 我能够使用 Realm 进行一些写入。问题是当我尝试使用 获取 RealmResults 时 mResults = mRealm.where(Player.c
我想搜索一个网页来找到两个字符串。我使用这段代码: webView.setWebViewClient(new WebViewClient() { @Override public vo
供应商 ID 和产品 ID 正在传递给 FindAllAsync,并且没有从 FindAllAsync 返回任何设备。我们已经验证这些是正确的设备 ID,并且可以在其他平台上运行。它不是即插即用设备。
var rfcomm = Windows.Devices.Bluetooth.Rfcomm; var sockets = Windows.Networking.Sockets; var streams
当我查询大量元素时,UI 会卡住。 realm.where(TVRealm.class).equalTo("favorite", true).findAllAsync()
我正在创建一个 Android 应用程序,它必须在 WebSite 中找到一些东西,然后突出显示它并在其上创建点击操作。 我正在使用这种方法寻找字符串“文本”: private void search
我的电脑有一个工作的智能卡读卡器,应该由下面的代码片段返回: string selector = Windows.Devices.SmartCards.SmartCardReader.GetDevic
我有一个代码可以列出 Windows Phone 8.1 可以检测到的所有蓝牙LE 设备(已配对和未配对): var devices = await DeviceInformation.Fin
我正在尝试使用 findFirstAsync 创建对 Realm 的异步调用。 Realm.getDefaultInstance().where().findFirstAsync() 但它总是导致“无
我正在桌面应用程序中编写代码,该应用程序发现并连接到具有适用于 Windows 10 的 Wi-Fi Direct 的设备。我遵循了 instructions关于如何从非 WinRT 环境调用 Win
我是一名优秀的程序员,十分优秀!