Realm 你真好

版权声明:小哥哥小姐姐 欢迎关注csdn 小凡爱碧瑶 https://blog.csdn.net/Aiction/article/details/89596726

晚上和女友吵了几句,原因是今天讨论在省会买房子首付得30W,可现在快结婚的我才能拿出来10多万,加上结婚后家里给的也才能凑够不到20万.她说,你这个穷光蛋,穷死了. 我他妈,我现在每天脑子里想的都是怎么赚钱,有没有别的路子,还在接私活做,你不给我打气,你老是说这些看似调皮的开玩笑的话.我有时候在想,人活着为了什么,对于买不起房的人来说,就是当房奴,对于无形中伤害你自尊,调皮的打击你的屌丝命,而且是至亲的另一半来说,我觉得很绝望.我难道不是在拼了命的活着吗?


Realm是我两年前用过的一个数据库框架,用来做缓存.
最近几个项目我都拿来用,很给力,很高效,很nice.
Realm第一我是用来做页面的响应式UI展示,二是做日志存储,三是做网络请求失败的缓存,四是做一系列任务的顺序执行控制者.


首先是UI响应式交互.
通过RealmResult.addChangeListner()来监听需要展示的数据的变化来及时的展示UI,作用类似于广播,EventBus.
你只需要http请求完把数据存到数据库中,就不用管了,不用管activity销毁带来的一系列可能的空指针异常,不用管什么时候刷新ui.记住,UI是通过数据库的数据变化的,不需要你控制ui变化.当然了,acitivty销毁的时候,记得removeListener();

  mNotices = LoginIns.mGlobalRealm.where(Notice.class).findAllAsync();
        mNotices.addChangeListener(((notices, changeSet) -> {
            StringBuilder sb = new StringBuilder();
            for (Notice notice : notices) {
                sb.append(notice.getDesc()).append("\t\t");
            }
            mTvNotice.setText(sb.toString());
        }));

二是日志,你们的客户用产品的时候,难免会有问题出现,这个时候,你需要客户给你发日志文件,或者是口述遇到的问题.
你当然可以把日志记到数据库,通过一个隐蔽的入口可以在一个页面展示出来,这样便于直接在客户的手机上分析他的日志.


关于网络请求失败的缓存尝试问题,这个很nice.尝试涉及到重试次数,超时多长时间才去重试,重试是并发去重试异步响应,还是同步线程里顺序重试的问题.


我这边是用IntentService,同步去顺序重试失败的请求.为什么呢,因为没有必要一次顺发几十个请求,他们都是同一个接口.因为可能失败的原因可能是404,或者是500,同一个接口你一个一个来就行.还有一个原因是因为用到Realm的监听,当一个接口成功了,会设置数据库这条记录成功,同时触发监听器去执行下一条重试的接口,就像一个队列,很有序.


关于逻辑复杂的问题,比如你要上传文件然后需要将服务器返回的md5放到另外一个接口里面做参数上传.这个时候你可以异步等待上传完文件之后回调到ui现场,然后你再去调另外一个接口.但是中途网络出问题了,或者是app被杀死了,那么你知道这中间卡在哪一步了吗.你可以记录在realm中,当文件上传完成之后,改变RealmObject的字段,触发监听器去调用另外一个接口,即使第二个接口失败了,也不用再上传文件了,因为你有记录了.


之后再用代码详细分享. 晚安~

猜你喜欢

转载自blog.csdn.net/Aiction/article/details/89596726
今日推荐