安卓分页加载框架Paging+Dagger2的刷新问题
一直以来都在努力学习谷歌的Android Architecture Components框架,也下了官方的实例项目进行实际的调试。个人觉得直接去调试官方得代码是上手最快的方式,一顿操作之后就可以自己写一个项目来加强理解了,肯定会有很多“坑”,所以想写写文章记录一下。
- Paging的刷新问题,先看看官方是怎么写的
-
就是调用DataSource类的invalidate()方法,我照做了确毫无反应?!!这下懵逼了,打断点开始一顿调试推理,首先断点打在了DataSource类的loadInitial()方法上,因为要刷新数据就要重新加载数据。结果官方的走了这个断点我的没有,这是什么鬼?
-
去看源码吧,一看脑袋疼,那只有大胆猜想了:它一定是DataSuorce创建的时候被调用的,所以找到创建这个类的地方,来一个断点。
-
没猜错!每次调用DataSource类的invalidate()方法都会跑到这里,也就是说每次调用DataSource类的invalidate()都会触发DataSource.Factory的create方法,我的代码在相同的地方打了断点,结果确出乎预料!在这里出现了死循环!上代码
-
差不多的代码,唯一的区别是我用的注入框架注入的DataSource对象,这是一个单例模式的注入,也就是说我没有去重新创建DataSource对象,而是返回了之前创建的那个DataSource对象,而之后我用new去创建DataSource对象,如上图注释掉的代码所示,问题迎刃而解。看看DataSource.Factory的create是如何注释的吧。
-
重点是说当DataSource失效时要通过这个方法去重新创建一个DataSource对象,和我想的不谋而合。
-
总结一下吧,1.初学者看代码是必要的,但永远不要只看代码,动手去调试可能会更快的解决问题!2.带着脑子去调试!
-