android - Realm: Why on Devices/Emulators method RealmChangeListener.onChange() NOT call every times? -
realm 3.5.0
android application.
my snippet:
public class mainapp extends multidexapplication implements realmchangelistener<realmresults<permissionofferresponse>> { private void loginandconfig() { string authurl = "http://" + buildconfig.object_server_ip + ":" + buildconfig.object_server_port + "/auth"; syncuser.callback callback = new syncuser.callback() { @override public void onsuccess(syncuser user) { syncuser = user; createpermissionofferandsyncwithros(); } @override public void onerror(objectservererror error) { string errormsg; switch (error.geterrorcode()) { case unknown_account: errormsg = "account not exists."; break; case invalid_credentials: errormsg = "user name , password not match"; break; default: errormsg = error.tostring(); } log.w(tag, "loginandconfig: onerror: result errormsg = " + errormsg); } }; synccredentials synccredentials = synccredentials.usernamepassword( buildconfig.user_name, buildconfig.password, false); syncuser.loginasync(synccredentials, authurl, callback); } private void createpermissionofferandsyncwithros() { realm managementrealm = syncuser.getmanagementrealm(); string offertoken = buildconfig.realm_offer_token; final permissionofferresponse newpermissionofferresponse = new permissionofferresponse(offertoken); managementrealm.executetransaction(new realm.transaction() { @override public void execute(realm realm) { realm.insert(newpermissionofferresponse); } }); realmresults<permissionofferresponse> realmresultpermissionofferresponse = managementrealm.where(permissionofferresponse.class) .equalto("id", newpermissionofferresponse.getid()) .equalto("statuscode", 0) // status > 0 error .findall(); realmresultpermissionofferresponse.addchangelistener(this); } @override public void onchange(realmresults<permissionofferresponse> permissionofferresponse) { permissionofferresponse permissionofferresponse = permissionofferresponse.first(); realmurl = permissionofferresponse.getrealmurl(); } }
my steps:
- start android application
- check method realmchangelistener.onchange() call
- uninstall android app
i repeat 3 steps 10 times.
results on different android configurations:
****************************************************** emulator: android 4.0.3, ram 512 mb, vm heap 48 mb method realmchangelistener.onchange() call 10 times. ****************************************************** device: android 4.3, ram 700 mb method realmchangelistener.onchange() call 7 times. ****************************************************** emulator: android 6.0, ram 512 mb, vm heap 48 mb method realmchangelistener.onchange() call 7 times. ****************************************************** emulator: android 6.0, ram 1 gb, vm heap 48 mb method realmchangelistener.onchange() call 5 times. ****************************************************** device: android 6.0, ram 2 gb method realmchangelistener.onchange() call 10 times.
questions:
- why on devices/emulators method realmchangelistener.onchange() not call 10 times?
- how can fix this?
thanks.
the following could work:
private set<realmchangelistener<realmresults<permissionofferresponse>> changelisteners = new hashset<>(); private void createpermissionofferandsyncwithros() { realm managementrealm = syncuser.getmanagementrealm(); string offertoken = buildconfig.realm_offer_token; final permissionofferresponse newpermissionofferresponse = new permissionofferresponse(offertoken); managementrealm.executetransaction(new realm.transaction() { @override public void execute(realm realm) { realm.insert(newpermissionofferresponse); } }); realmresults<permissionofferresponse> realmresultpermissionofferresponse = managementrealm.where(permissionofferresponse.class) .equalto("id", newpermissionofferresponse.getid()) .equalto("statuscode", 0) // status > 0 error .findall(); class _realmchangelistener implements realmchangelistener<realmresults<permissionofferresponse>> { private realmresults<permissionofferresponse> results; public _realmchangelistener(realmresults<permissionofferresponse> results) { this.results = results; changelisteners.add(this); results.addchangelistener(this); } @override public void onchange(realmresults<permissionofferresponse> element) { changelisteners.remove(this); mainapp.this.onchange(element); } } new _realmchangelistener(realmresultpermissionofferresponse); } public void onchange(realmresults<permissionofferresponse> permissionofferresponse) { permissionofferresponse permissionofferresponse = permissionofferresponse.first(); realmurl = permissionofferresponse.getrealmurl(); } }
Comments
Post a Comment