Ваша основная проблема заключается в том, что вы перезапускаете таймер в методе run()
, чего вам не следует делать. Метод run()
вызывается каждый раз, когда таймер «тикает» - здесь вы не хотите изменять и перезапускать свой объект таймера.
Попробуйте это (не проверено, но должно работать). Добавьте метод в ваш класс Timer_Task с именем start:
public void start() {
timer = new Timer();
timer.schedule(this, 0, 150000);
}
Измените run()
метод на этот:
public void run() {
resetGPS();
}
Наконец, в конструкторе класса, вызовите this.start()
вместо this.run()
.
Причина, по которой ваш метод остановки, по-видимому, не останавливает таймер, заключается в том, что даже если вы отмените таймер, если есть один ожидающий вызов run()
, вызов все равно произойдет, даже если таймер был отменен. Когда этот последний вызов происходит в существующем коде, создается и запускается новый таймер, поэтому весь процесс никогда не останавливается.
Редактировать: Еще одно изменение, которое вы должны сделать, это добавить boolean
в ваш класс Timer_Task с именем _isRunning
и установить его на true
, когда вы запускаете таймер и устанавливаете его на false
внутри вашего Stop
метода. Затем вы проверите эту переменную внутри метода run()
, и return
, если _isRunning
равно false (это позволяет игнорировать любые ожидающие вызовы run()
после остановки таймера).