我在GITHUB看到要问这里..
旧的SQLIte我曾经创建过一个用于进行数据库操作的CRUD服务..现在它有点不同,为什么?因为我应该记得打电话给realm.close();
我至少有4个活动,10个片段,10个异步任务和其他东西,每个人都有一种数据库操作,如果我需要调用realm.close
我应该创建一个CRUD,并传递realm
并使用它来进行操作?
我的实际代码如下所示:
static LOperations instance;
private Realm realm;
private RealmQuery<L> query;
private RealmResults<Category> categories;
private L lObject;
public LOperations(Application application) {
realm = Realm.getDefaultInstance();
}
public static LOperations with(Activity activity) {
if (instance == null) {
instance = new LOperations(activity.getApplication());
}
return instance;
}
public static LOperations with(Application application) {
if (instance == null) {
instance = new LOperations(application);
}
return instance;
}
public static LOperations with(Fragment fragment) {
if (instance == null) {
instance = new LOperations(fragment.getActivity().getApplication());
}
return instance;
}
@Override
public RealmResults<Lei> getAllLbyCategory(String c) {
query = realm.where(L.class);
query.equalTo("active", 1);
query.contains("category", c);
return query.findAllSorted("id", Sort.ASCENDING);
}
@Override
public RealmResults<Category> getAllCategories() {
return realm.where(Category.class).equalTo("active", true).findAllSorted("order", Sort.ASCENDING);
}
@Override
public RealmResults<Lei> getAllActiveL() {
query = realm.where(L.class);
query.equalTo("active", 1);
return query.findAllSorted("last_date", Sort.ASCENDING);
}
这项工作非常完美,但我无法理解如何跟踪已打开的数据库?
实际上我使用它:LOperations.with(this/getActivity).someMethod();
(通过这样做,我认为我无法跟踪打开的领域)
我可以考虑一下这个:
Realm realm = realm.getDefaultInstance();
and to get allActiveL(), change to:
@Override
public RealmResults<Lei> getAllActiveL(Realm realm) {
realm.where(L.class);
query.equalTo("active", 1);
return query.findAllSorted("last_date", Sort.ASCENDING);
}
所以我创建了领域然后将其传递给METHOD,所以我可以在onDestroy上添加realm.close()
是正确的做法吗?或者还有另一个吗?
答案 0 :(得分:0)
目前,您的LOperations
仅适用于您首次创建实例的线程,然后它不会在任何其他线程上工作(它很容易在{{1 }})
目前我的存储库都有一个doInBackground()
参数,并且是单例。另一种可能的方法是在需要时创建一个存储库,并在创建时将实例传递给它(并且在执行线程时关闭实例)。
Realm
我个人使用single Realm for the UI thread,并为后台线程创建Realm实例,最后关闭。
但一般来说,public interface RealmRepository<T extends RealmObject, ID> {
String getIdFieldName();
T findOne(Realm realm, ID id);
RealmResults<T> findAll(Realm realm);
T saveOrUpdate(Realm realm, T t);
RealmList<T> saveOrUpdate(Realm realm, RealmList<T> tList);
RealmQuery<T> query(Realm realm);
void delete(Realm realm, ID id);
void delete(Realm realm, T t);
void deleteAll(Realm realm, RealmResults<T> realmResults);
void deleteEveryObject(Realm realm);
long count(Realm realm);
}
和onCreate()
适用于活动,onDestroy()
和onCreateView()
适用于普通片段,我个人constructor
and onDestroy()
for retained fragments。
对于异步任务,
onDestroyView()