一、声明
首先我说明一下,这个框架,无论是MVPArms(该作者的思想不错,特别值得我学习,但是思想这玩意儿好难学)还是OKGO,都是好框架,但是在使用过程中难免会有好多的坑出现,其实也是我们没有按照作者的文档或是方法、步骤进行。
二、原因
我开发一款APP中,订单、车辆管理数据比较多,又不好做分页(数据要求要新好完整排序),所以就请求了完整的数据列表,服务器搜索时间较长,导致了mRootView为空了(大概是15秒的时间),这里并不是很理解,无论是不是在当前页(acitivity或fragment)都会出现这情况,如果不处理的话,就会造成程序停止运行。
三、解决
1、增加判断 if(null != mRootView) { 代码省略 },这个方式不可取,但也是我前期的方案,这个方法不好的地方在于页面会一直转圈圈,因为mRootView为null了,取消加载框的代码执行不了,但总比停止运行强、
2、重写IView接口类,增加动态代理模式,统一判断、统一处理,这个方法没有试过,应该是可行的。
3、既然15秒的时间造成空指针,那么把OKGO的超时时间定为10秒。另外在presenter中的onDestroy()方法中加入
OkGo.getInstance().cancelAll();
或
OkGo.getInstance().cancelTag(tag);
就可以了(目前采用的方法)
四、疑问
如果这篇文章有幸被MVPArms的作者 JessYan 看到,我想知道为什么mRootView为null的时间大概为15秒?是设计如此还是android的回收机制造成的?