java - Refreshing multiple Realm instances at once? -
i'm using setup in every presenter retained fragment has own realm instance. however, means these realms on main thread.
now means, if want modify realm, either need on main thread (which okay small data sets, don't want large data sets), or need on background thread, , refresh every realm instance @ once (which possible simple event event bus).
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 main thread: bus level"); throw e; } } }); } } catch(exception e) { log.e(tag, "post 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(); } } } } and
singletonbus.instance.posttomainthread(new realmrefreshevent()); @subscribe public void onrealmrefreshevent(realmrefreshevent e) { this.realm.refresh(); } but assuming have 5-7 realm instances open on main thread (as every presenter has own open realm while not destroyed), i'm concerned performance and/or memory usage.
so guess have 2 questions,
1.) bad practice / heavily resource-intensive have multiple realm instances open on main thread?
2.) how resource-intensive update multiple realms on same thread global refresh event?
realm uses threadlocal cache internally pr. realm file practically free call realm.getinstance() in every activity/fragment/presenter have. first call realm.getinstance() cost little database has opened , schema verified, after cost cache lookup.
the cache reference counted native resources freed after instances has been closed. means can beneficial keep @ least 1 open instance around long possible.
this means when update 1 of open instances, updated automatically.
Comments
Post a Comment