react-native与android原生交互启动service,里面写了个定时任务,退出登录后重新登录,程序竟然崩溃了?!好坑啊~查看崩溃日志发现,报以下错误:java.lang.IllegalStateException: TimerTask is scheduled already,什么原因?
原来同一个定时器任务只能被放置一次,也就是说TimerTask是一次性的,用完了就得扔,要用的话需要重新new一个新的TimerTask出来。
百度找到了解决方法~
原来的写法:
...
TimerTask task = new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mTimer = new Timer();
mTimer.schedule(task, 1000, 600000);
return super.onStartCommand(intent, flags, startId);
}
...
更改后写法:
...
class RequestTimerTask extends TimerTask {
public void run() {
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
mTimer.cancel();
}
}
...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mTimer = new Timer();
mTimer.schedule(new RequestTimerTask(), 1000, 600000);
return super.onStartCommand(intent, flags, startId);
}
...
参考文章java.lang.IllegalStateException: TimerTask is scheduled already问题分析
经测试,bug完美解决~
网友评论