我在项目中使用领域。我构建这个RealmActivity是为了在代码中轻松地使用getActivity.getRealm()。
public abstract class RealmActivity extends AppCompatActivity {
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
realm = Realm.getDefaultInstance();
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (!realm.isClosed()) {
realm.close();
}
}
public Realm getRealm() {
return realm;
}现在,我想删除领域文件,以清除此会话/用户的数据。要做到这一点,必须关闭所有RealmInstances。我试图启动一个登录活动,目的是清除activityStack。它适用于我的Nexus 5 (Android 6),但不适合我的Nexus 4 (Android 5)。
我的想法是为RealmInstance创建一个单例,它在UI-线程中使用。
public abstract class RealmActivity extends AppCompatActivity {
private Realm realm;
@Override
protected void onCreate(Bundle savedInstanceState) {
realm = ManagerLayer.getInstance().getRealm();
super.onCreate(savedInstanceState);
}
@Override
protected void onDestroy() {
super.onDestroy();
}
public Realm getRealm() {
return realm;
}}
现在,我只有一个实例,可以在删除文件之前关闭它。但是当我不注销的时候,我从来没有关闭过RealmInstance。这是个问题吗?
但是,当我清除ActivityStack和onDestroy()方法时,活动的RealmInstance也永远不会关闭。对吗?
我可以为UI-线程realmInstance使用Singleton吗?我从不把它传递给另一个线程,也从不关闭它。或者是否有另一种解决方案来关闭所有RealmInstances来删除RealmFile?
发布于 2015-12-14 17:18:03
如果希望保留整个应用程序所需的某个对象的实例,则应将此实例保存在:
Application类,扩展它并在AndroidManifest.xml中设置android:name。谈到生命周期,如果您有一些关闭领域实例的操作,这就足够了,只需在您的单例中创建一个清晰的方法并正确调用它。
如果不是这样的话,您必须记住,您永远不能保证调用onDestroy方法,但是如果您不释放资源,因为该进程已被杀死,您根本不必担心,因为当进程被杀死时,所有未持久化的对象都将被完全释放,即使它们使用的是文件系统或网络。
https://stackoverflow.com/questions/34272502
复制相似问题