我有經常使用的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將是最好的選擇! :) –