美好的一天。我有一个问题。
首先,在我看来,一个很好的数据库用于存储本地数据,我已经开发了一个社交网络,我在本地保存消息,并在每个应用程序开始我从服务器下载消息,以在本地保存它们让我们说当前会话将被使用。 Realm似乎是开箱即用的最佳解决方案但是我遇到了由于Realm事务而阻止我的UI的情况。以下是案例。
•我必须使用UI线程中的Realm对象,否则它将抛出异常,说我需要从我调用的线程访问该对象,因此在这种情况下,来自领域的executeTransactionAsync
将不会因为事务仍然会在UI线程上发生
•这是第一次这样的问题,但我想象自己为什么以前不是问题,因为我的测量不是那么多,现在我有40条消息和哇...领域阻止UI真的很可怕(只是这是一个很好的事情。
•我试图运行realm实际事务和我在一个单独的线程中调用的方法,但是这样做不会有效,因为必须从UI线程访问Realm对象,所以背景线程没有运气一点都不。
所以,如果有人能讨好,我来这里寻求帮助吗?
这是领域方法的代码
public void insertMessage(final String userId, final String opponentId, final String message,
final String messageId, final String date,
final String id, final String deliveryStatus,
final String userImage,
final String opponentImage, final String deleteOpponentId,
final String deleteUserId,
final boolean hasGif, final String gifUrl, final boolean animated) {
if (!isMessageExist(messageId)) {
handler.post(new Runnable() {
@Override
public void run() {
}
});
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
MessageModel messageModel = realm.createObject(MessageModel.class);
messageModel.setId(id);
messageModel.setMessageId(messageId);
messageModel.setMessage(message);
messageModel.setUserId(userId);
messageModel.setOpponentId(opponentId);
messageModel.setAnimated(animated);
messageModel.setDeliveryStatus(deliveryStatus);
messageModel.setUserImage(userImage);
messageModel.setOpponentImage(opponentImage);
messageModel.setDate(date);
messageModel.setHasGif(hasGif);
messageModel.setGifUrl(gifUrl);
messageModel.setDeleteUserId(deleteUserId);
messageModel.setDeleteOpponentId(deleteOpponentId);
}
});
}
}
此时句柄基本上是MainLooper
UI线程
我在循环中调用了这个方法,我得到了消息数组,就是这样,有什么帮助吗?
答案 0 :(得分:-1)
只需在执行异步事务的另一个线程中创建你的realm实例,你就可以了。