Android 如何创建只读领域对象?
假设我的android应用程序中有两个领域文件,A和B。A是加密的,B不是。我在UI线程上查询一个领域,得到一个领域对象,其中包含一组字符串属性。现在,基于这些属性,我需要使用Android 如何创建只读领域对象?,android,realm,Android,Realm,假设我的android应用程序中有两个领域文件,A和B。A是加密的,B不是。我在UI线程上查询一个领域,得到一个领域对象,其中包含一组字符串属性。现在,基于这些属性,我需要使用executeTransaction更新领域B中的对象,以避免在UI线程中进行更新。execute方法为我提供了对领域B实例的引用,但我还需要打开领域a,因为我无法与此线程共享上一个对象。由于领域A是加密的,我认为在事务中打开和关闭它可能有点慢。创建领域对象的只读副本并在事务中使用该副本不是更快吗?应该是这样的: Real
executeTransaction
更新领域B中的对象,以避免在UI线程中进行更新。execute方法为我提供了对领域B实例的引用,但我还需要打开领域a,因为我无法与此线程共享上一个对象。由于领域A是加密的,我认为在事务中打开和关闭它可能有点慢。创建领域对象的只读副本并在事务中使用该副本不是更快吗?应该是这样的:
RealmObject var1 = realmA.where(SensibleData.class).findFirst();
final ReadOnlyObject myReadOnlyObject = copyRealmObject(var1);
realmB.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
//use myReadOnlyObject to decide how to update RealmObjects
}
});
这是解决我问题的好办法吗?实现copyRealmObject
以避免领域内存问题的好方法是什么?更具体地说,复制字符串的最佳方式是什么?也许像
copiedAttribute = new String(realmObject.getSomeStringAttribute());
首先,您调用的
Realm.executeTransaction(Realm.Transaction)
是一个同步版本。它将在调用方的线程中运行。您需要调用executeTransaction(Realm.Transaction,Realm.Transaction.Callback Callback)
来调用异步调用。看
对于您的情况,您可以:
Realm.copyFromRealm
。它将从RealmObject中删除RealmObject,使其独立,并可以通过线程进行传递。虽然它不是只读的,但它对于您的用户案例来说非常方便。看字符串
问题
我认为您永远不需要复制
字符串,因为字符串是不可变的。您应该只使用getter返回的字符串。首先,您调用的Realm.executeTransaction(Realm.Transaction)
是一个同步版本。它将在调用方的线程中运行。您需要调用executeTransaction(Realm.Transaction,Realm.Transaction.Callback Callback)
来调用异步调用。看
对于您的情况,您可以:
只需在事务中打开加密域,我不认为它会很慢:),但它会添加几行代码来打开/关闭/查询对象
使用Realm.copyFromRealm
。它将从RealmObject中删除RealmObject,使其独立,并可以通过线程进行传递。虽然它不是只读的,但它对于您的用户案例来说非常方便。看
----对于复制字符串
问题
我认为您永远不需要复制字符串,因为字符串是不可变的。您应该只使用getter返回的字符串