最近的一个android项目已经升级了第二个大版本,以前出现的一些问题都有效的得到了解决。今天早晨在用户使用时,又发现了一个新的问题。
在产品经过了初始化的加载之后便进入到了欢迎界面,欢迎界面中展示了用户的一些信息以及今日的天气。由于在进入欢迎界面后,程序才会启动一个新的线程去获取天气预报信息,但是此时初始化过程中下载各种数据的线程都已经启动,由于此时带宽压力较大,获取天气预报需要1分钟左右。所以这样就导致了整个界面天气预报部分一分钟左右没有信息。
虽然在经过一段时间的加载之后就能够有效展示出信息,但是这样也是用户不可接受的。假设如果我是用户,看到这样的情况也会产生各种不信任
在经过了仔细思考后,想到了在本地建立天气预报缓存内容的办法。缓存中始终存放的是目前最新的天气预报信息,如果下载线程能够获取到最新的数据,重新绘制天气界面即可。这样的好处就是即使下载失败,或者网络不通的情况下也能够展示出天气信息,从而能够不受限于网络的状况。
有了思路后,实现的过程还是比较简单的:
1、activity在oncreate中,启动天气信息的下载线程,下载成功后,将信息序列化,写入到SharedPreferences中,重新绘制天气信息
2、acvitity在oncreate中,默认绘制从SharedPreferences中取出的天气信息
3、如果线程获取信息失败,可以按照重试次数重新启动下载线程
这样做的好处就是将天气信息的获取与天气信息的显示解耦了,降低了耦合性。有的时候,策略也是非常重要的。