账号是如何被挤?又是如何跳转到登录页面的?
终于,凶手露出了水面,凶手就是Looper
,原来妹子是通过OkHttp
的拦截器来监听账号被挤,并通过Looper
来弹出一个Toast提示,并且执行页面跳转逻辑,如下:
public class TokenInterceptor implements Interceptor {
private Context context;
//省略部分代码
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response originalResponse = chain.proceed(request);
String code = originalResponse.header(“code”);
if ("-1".equals(code)) { //账号被挤
Looper.prepare();
Toast.makeText(context, “你的账号在其它设备上登录”, Toast.LENGTH_LONG).show();
context.startActivity(new Intent(context, LoginActivity.class));
Looper.loop();
}
return originalResponse;
}
}
也许你会问,这确定有问题?通过Looper
在子线程弹出一个Toast
,这不是很正常的一件事?经常这么干,从来没出现任何问题,为啥到你这就出问题?
我让妹子把Looper
及Toast
代码注释掉,if语句里面只保留一行startActivity
,妹子试后开心的跟我说,好了,没问题了,这怎么解释?
Looper
一脸委屈的说道:你说我是凶手,我就是凶手了,证据呢?
ok,我们就来寻找证据,我们知道,Looper.loop()
方法内部,会开启一个死循环,如下:
public static void loop() {
//省略部分代码
for (;