Looper,flutterui套件

账号是如何被挤?又是如何跳转到登录页面的?

终于,凶手露出了水面,凶手就是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,这不是很正常的一件事?经常这么干,从来没出现任何问题,为啥到你这就出问题?

我让妹子把LooperToast代码注释掉,if语句里面只保留一行startActivity,妹子试后开心的跟我说,好了,没问题了,这怎么解释?

4、开始破案


Looper一脸委屈的说道:你说我是凶手,我就是凶手了,证据呢?

ok,我们就来寻找证据,我们知道,Looper.loop()方法内部,会开启一个死循环,如下:

public static void loop() {

//省略部分代码

for (;

上一篇:Android基础知识整理(三) 线程与进程


下一篇:Android源码剖析:基于-Handler、Looper-实现拦截全局崩溃