使用rxjava和dagger2跨线程访问java领域
我读过很多关于这个话题的帖子,但我还是有点不清楚。我知道你不能跨不同的线程访问Realm
类或领域对象,所以我想知道处理这个问题的最佳方法是什么
我有一个启动线程的服务。该线程执行后台工作(包括通过rxjava
在Schedulers.io
上执行的工作)。现在,在某一点上,我想将一些数据保存到DataManager类中的领域。最初,我使用Dagger2
将Realm
注入到我的DataManager类中(该类本身被注入到服务中)。但是,这将不起作用,因为注入是在主线程上完成的,所以Realm.getDefaultInstance()
绑定到主线程,但它是从另一个线程在DataManager中访问的
我能想到的唯一可行的选择是在执行事务的每个方法的开头和结尾调用Realm.getDefaultInstance()
和realm.close()
。我不介意这样做,但我想知道每次我想保存一个对象时调用Realm.getDefaultInstance()
是否会影响性能。有更好的方法吗?提前谢谢
# 1 楼答案
在我的一个应用程序中使用Realm时,我通过创建
DatabaseManager
类解决了线程问题,我使用Dagger 2将该类注入到活动和服务中例如,如果我有一个实体
Task
,那么DatabaseManager
类有一个方法void update(Task task)
,该方法将获取默认的领域实例,从领域数据库中获取具有给定ID的Task
,更新事务块中获取的Task
实例,执行realm.copyFromRealm(updatedTask);
,并在方法结束时关闭领域实例这对我很管用。如果有更好的方法,我想知道更多