react-native與android原生交互啟動service常挚,里面寫了個定時任務(wù)性含,退出登錄后重新登錄兄一,程序竟然崩潰了?厘线!好坑啊~查看崩潰日志發(fā)現(xiàn),報以下錯誤:java.lang.IllegalStateException: TimerTask is scheduled already出革,什么原因造壮?
原來同一個定時器任務(wù)只能被放置一次,也就是說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問題分析
經(jīng)測試展箱,bug完美解決~