我有经常使用的writeToRealm方法。我需要从不同的线程使用它并剪切样板代码。这项任务的更好方法是什么?使用不同线程的领域事务
private boolean writeToRealm(String user, String id) {
SubscriberObject subscriber = new SubscriberObject();
if(mRealm.where(SubscriberObject.class)
.equalTo(SubscriberObject.ID,id).findAll().isEmpty()
&&mRealm.where(SubscriberObject.class)
.equalTo(SubscriberObject.USERNAME,user).findAll().isEmpty()) {
subscriber.setId(id);
subscriber.setUsername(user);
mRealm.beginTransaction();
mRealm.insert(subscriber);
mRealm.commitTransaction();
return true;
}
return false;
}
我打算使用下面的施工(或像这样),但我不能创建一个正确的建设:
public static Boolean writeToRealm(final String user,final String id){
Realm mRealm;
return Flowable.using(
mRealm = Realm.getDefaultInstance(),
new Function<Realm, Boolean>() {
@Override
public Boolean apply(@NonNull Realm realm) throws Exception {
SubscriberObject subscriber = new SubscriberObject();
if(realm.where(SubscriberObject.class)
.equalTo(SubscriberObject.ID,id).findAll().isEmpty()
&&realm.where(SubscriberObject.class)
.equalTo(SubscriberObject.USERNAME,user).findAll().isEmpty()) {
subscriber.setId(id);
subscriber.setUsername(user);
realm.beginTransaction();
realm.insert(subscriber);
realm.commitTransaction();
return true;
}
return false;
}
},
mRealm.close()).subscribeOn(Schedulers.io());
}
或可能是我需要创建一个线程类与循环这个任务?
如何更好地将这种方法和类似的方法整合到一个干净的架构中?
请喜欢使用executeTransaction()也是,产生一个新的线程,并得到一个境界对象首次被沉重的操作,我会建议你使用ExecutorService –
Sarthak Mittal,我想过了,但我们仍然需要每次都创建一个实例,并且需要looper来控制更改。 – Delphian
如果你需要一个非UI线程以及looper,那么HandlerThread将是最好的选择! :) –