pat*_*pat 6 java multithreading android realm
我已经阅读了很多关于这个主题的帖子,但对我来说还是有点不清楚.我知道你不能Realm跨不同的线程访问类或领域对象,所以我想知道处理它的最佳方法是什么.
我有一个启动线程的服务.该线程执行后台工作(包括通过rxjavaon 工作Schedulers.io).现在在某一点上,我想将一些数据保存到存在于DataManager类中的领域.最初我Dagger2用来注入Realm我的DataManager类(它本身被注入到服务中).但是这不起作用,因为注入是在主线程上完成的,因此Realm.getDefaultInstance()绑定到主线程但是在DataManager中从不同的线程访问它.
我能想到的唯一可行的选择是调用Realm.getDefaultInstance()并realm.close()在每个执行事务的方法的开头和结尾.我不介意这样做,但我想知道Realm.getDefaultInstance()每次我想要保存对象时是否会有性能命中.有一个更好的方法吗?提前致谢.
我在一个应用程序中使用 Realm 时解决了线程问题,方法是创建一个DatabaseManager类,并使用 Dagger 2 将其注入到 Activity 和 Services 中。
例如,如果我有一个实体Task,该类DatabaseManager有一个方法void update(Task task)可以获取默认的 Realm 实例,Task从 Realm 数据库中获取给定的 ID,更新Task事务块中获得的实例,realm.copyFromRealm(updatedTask);最后执行并关闭 Realm 实例的方法。
Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
// fetch the object from Realm database and update it as required.
//https://realm.io/docs/java/latest/api/io/realm/Realm.html#copyFromRealm-E-
// Makes an unmanaged in-memory copy of an already persisted RealmObject.
realm.copyFromRealm(task);
}
}
});
realm.close();
Run Code Online (Sandbox Code Playgroud)
这对我有用。如果有更好的方法我想了解更多。
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |