我在项目中使用 Realm。我构建此 RealmActivity 是为了通过 getActivity.getRealm() 在代码中轻松使用 Realm。
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;
}
现在我想删除 Realm 文件以清除该 session /用户的数据。为此,必须关闭所有 RealmInstance。我尝试启动注销 Activity , Intent 清除 ActivityStack。它适用于我的 Nexus 5 (Android 6),但不适用于我的 Nexus 4 (Android 5)。
我的想法是为 RealmInstance 创建一个单例,它在 UI-Thread 中使用
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() 方法时,该 Activity 的 RealmInstance 也永远不会关闭。对吗?
我可以对 UI-Thread Realm 实例使用单例吗?我从不将它传递给另一个线程,也从不关闭它。 或者是否有另一种解决方案来关闭所有 RealmInstances 以删除 RealmFile?
最佳答案
如果您想保留整个应用程序所需的某个对象的实例,您应该将该实例保留在:
Application
类,对其进行扩展并在AndroidManifest.xml
中设置android:name
。- 另一个不是 Android 组件的类,一个简单的 java 类。
谈论生命周期,如果您有一些关闭 Realm 实例的操作,这就足够了,只需在您的单例中创建一个明确的方法并正确调用它即可。
如果不是这种情况,你必须记住,你永远不能保证onDestroy
方法被调用,但是如果你不释放资源,因为进程已被杀死,你完全不必担心,因为当一个进程被杀死时,所有未持久化的对象都将被完全释放,即使它们正在使用文件系统或网络。
关于android - 在 UI 线程中使用单例作为 Realm ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34272502/