问题:项目还是比较典型的mainActivity上面五个Fragment,出现的bug是有时候一进来主页Fragment部分数据没显示出来。
追踪:网络请求确实发出去了,打印也响应数据返回了。
NetClient.api.XXXXX(map)
.compose(NetworkScheduler.compose())
.bindToLifecycle(this)
.subscribe(object : NetResponse<RestResult<XXX.CLASS>>(activity) {
override fun success(data: RestResult<RechargeModel>) {
//这里没有回调,错误的回调也没有
}
数据进了Rxjava之后就没了,成功跟错误都没有回调。
这简直要炸,如果是一个请求那完全没有问题,大不了进入Rxjava源码进行断点,事件流传到哪里一目了然,但是这个项目初始化一进来有无数个请求,我是刚加入才几天的,连流程都不熟悉,这就无解了。
仔细看跟我之前学习使用的Rxjava的区别:.bindToLifecycle(this),rxlifecycle库,看名字就知道它的作用了,类似disposable的作用。
猜测是它断掉了事件流的传递,但是这个开源库源码没研究过,都不知道有没有提供api来判断。
从它的功能出发来分析,当界面失去焦点它会断掉流的传递。
在onResume里面打log,发现居然执行了两次,怪不得被中断了。
虽然界面有很多dialog,但是要知道我们正常弹出的dialog是不会导致当前界面失去焦点的,除非是系统的dialog,但是这流程没看到dialog啊。
百度一下:上一个界面权限请求会导致两次执行onResume,因为会有一个看不见的系统dialog瞬间出现又消失。
往引导界面查找,果然发现,这个界面的权限代码有问题,一进来就请求权限,在回调里处理下一步逻辑,不管之前是否请求过权限。
看来锅就是这个了,修改一下,检查,没问题了。