1、案件描述
在一个安静的下午,一妹子在`技术交流群里反馈(群号:977438066),自己开发的app,账号被挤下线时,重新登录到首页后,发现有一个请求,代码执行了,却没有任何回调,看得出,妹子很着急。
what ??? 还有这种事?原本安静的群,一下活跃了起来,男同胞们一顿狂猜,我总结了下,如下:
-
会不会请求代码没执行,妹子自己搞错了吧?
-
发请求前,出现异常,代码被中断运行?
-
请求过程伴随着页面跳转,导致页面销毁时,请求被自动关闭?
-
请求过程出现异常,被RxJava全局异常捕获了,并吃掉了,所以收不到失败回调?
这里解释下,妹子采用RxHttp+RxJava
结合的方式发请求
经过第一轮询问后,以上猜想轻而易举的被推翻了,我也大概知道了案件的细节,为此,我用代码来还原一下,为简化案件,还原时,我会适当的做出修改,但意思还是那个意思。
2、案件还原
妹子在首页MainActivity
的OnCreate
方法,会并行3个请求,如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
request1();
request2();
request3();
}
public void request1() {
RxHttp.get("/service/...")
.asString()
.to(RxLife.toMain(this)) //页面销毁,自动关闭请求,并在UI线程回调
.subscribe(s -> {
//成功回调
}, throwable -> {
//异常回调
});
}
public void request2() {
//省略请求代码,请求代码类似request1()方法
}
public void request3() {