1. 程式人生 > >react-native啟動android service bug解決辦法

react-native啟動android service bug解決辦法

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);
}
...

經測試,bug完美解決~