问题:
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
错误代码
/*开启一个定时器去校验token*/
private void startCheckTokenPeriod() {
if (tokenTask == null) {
tokenTask = new TimerTask() {
@Override
public void run() {
checkToken();
}
};
}
if (tokenTimer == null) {
tokenTimer = new Timer();
tokenTimer.schedule(tokenTask, 0,TOKEN_CHECK_PERIOD);
}
}
private void stopCheckToken() {
if (tokenTimer != null) {
tokenTimer.cancel();
tokenTimer = null;
}
if (tokenTask != null) {
tokenTask.cancel();
tokenTask = null;
}
}
原因
- TimerTask的run方法中存在需要在主线程执行的代码就会出现这种情况;、。
正确代码
/*开启一个定时器去校验token*/
private void startCheckTokenPeriod() {
if (tokenTask == null) {
tokenTask = new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
checkToken();
}
});
}
};
}
if (tokenTimer == null) {
tokenTimer = new Timer();
tokenTimer.schedule(tokenTask, 0,TOKEN_CHECK_PERIOD);
}
}
private void stopCheckToken() {
if (tokenTimer != null) {
tokenTimer.cancel();
tokenTimer = null;
}
if (tokenTask != null) {
tokenTask.cancel();
tokenTask = null;
}
}