java – 一次刷新多个Realm实例?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 一次刷新多个Realm实例?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2297字,纯文字阅读大概需要4分钟。
内容图文
![java – 一次刷新多个Realm实例?](/upload/InfoBanner/zyjiaocheng/704/b64afd62ac3a4bc791ab0aac89ba7300.jpg)
我正在使用一个设置,其中每个保留片段的Presenter都有自己的Realm实例.但是,这实际上意味着这些领域都在主线程上.
现在这也意味着,如果我想修改Realm,我要么需要在主线程上执行此操作(这对于小型数据集是可以的,但我真的不想对大型数据集执行此操作),或者我需要在后台线程上执行此操作,并立即刷新每个Realm实例(这可以通过事件总线的简单事件).
public enum SingletonBus {
INSTANCE;
private static String TAG = SingletonBus.class.getSimpleName();
private Bus bus;
private boolean paused;
private final Vector<Object> eventQueueBuffer = new Vector<>();
private Handler handler = new Handler(Looper.getMainLooper());
private SingletonBus() {
this.bus = new Bus(ThreadEnforcer.ANY);
}
public <T> void postToSameThread(final T event) {
bus.post(event);
}
public <T> void postToMainThread(final T event) {
try {
if(paused) {
eventQueueBuffer.add(event);
} else {
handler.post(new Runnable() {
@Override
public void run() {
try {
bus.post(event);
} catch(Exception e) {
Log.e(TAG, "POST TO MAIN THREAD: BUS LEVEL");
throw e;
}
}
});
}
} catch(Exception e) {
Log.e(TAG, "POST TO MAIN THREAD: HANDLER LEVEL");
throw e;
}
}
public <T> void register(T subscriber) {
bus.register(subscriber);
}
public <T> void unregister(T subscriber) {
bus.unregister(subscriber);
}
public boolean isPaused() {
return paused;
}
public void setPaused(boolean paused) {
this.paused = paused;
if(!paused) {
Iterator<Object> eventIterator = eventQueueBuffer.iterator();
while(eventIterator.hasNext()) {
Object event = eventIterator.next();
postToMainThread(event);
eventIterator.remove();
}
}
}
}
和
SingletonBus.INSTANCE.postToMainThread(new RealmRefreshEvent());
@Subscribe
public void onRealmRefreshEvent(RealmRefreshEvent e) {
this.realm.refresh();
}
但假设我在主线程上打开了大约5-7个领域实例(因为每个演示者都有自己的开放领域而不会被破坏),我担心性能和/或内存使用情况.
所以我想我有两个问题,
1.)在主线程上打开多个Realm实例是不好的做法/资源密集型的吗?
2.)使用全局刷新事件在同一线程上更新多个域的资源密集程度如何?
解决方法:
Realm在内部使用ThreadLocal缓存. Realm文件因此几乎可以在您拥有的每个activity / fragment / presenter中调用Realm.getInstance().第一次调用Realm.getInstance()会花费一些资源,因为必须打开数据库并验证模式,但之后只需要进行缓存查找.
缓存是引用计数的,因此只有在关闭所有实例后才会释放本机资源.这意味着尽可能长时间地保持至少一个打开的实例是有益的.
这也意味着当您更新其中一个打开实例时,它们都会自动更新.
内容总结
以上是互联网集市为您收集整理的java – 一次刷新多个Realm实例?全部内容,希望文章能够帮你解决java – 一次刷新多个Realm实例?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。