Ответ 1
Вероятно, вы захотите проверить TimerTask
Поскольку вы снова это сделали, я хотел бы сделать другую рекомендацию, которая представляет собой Handler. Он проще использовать, чем TimerTask, поскольку вам не нужно явно обращаться к runOnUiThread, поскольку обработчик будет связан с потоком пользовательского интерфейса, пока он создается в потоке пользовательского интерфейса, или вы создаете его с помощью основного петлетера в его конструкторе. Он будет работать следующим образом:
private Handler mHandler;
Runnable myTask = new Runnable() {
@Override
public void run() {
//do work
mHandler.postDelayed(this, 1000);
}
}
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
mHandler = new Handler(Looper.getMainLooper());
}
//just as an example, we'll start the task when the activity is started
@Override
public void onStart() {
super.onStart();
mHandler.postDelayed(myTask, 1000);
}
//at some point in your program you will probably want the handler to stop (in onStop is a good place)
@Override
public void onStop() {
super.onStop();
mHandler.removeCallbacks(myTask);
}
Есть несколько вещей, которые нужно знать о обработчиках в вашей деятельности:
- Ваша деятельность может быть отключена/не видна, пока ваш обработчик все еще работает, если вы не остановите его в onStop (или onPause, если вы запустили его в onResume), это приведет к проблемам, если вы попытаетесь обновить интерфейс пользователя
- Если ваш телефон переходит в глубокий сон, обработчики не будут запускаться так часто, как вы указали. Я знаю это, так как я провел некоторое тщательное тестирование с помощью Bluetooth-устройств для проверки возможности подключения после многих часов работы, и я использовал обработчики вместе с журнальными отпечатками каждый раз, когда они запускали.
- Если вам нужен этот таймер для продолжения, я рекомендую поместить его в службу, которая будет длиться дольше, чем активность. Зарегистрируйте свою деятельность в службе (путем реализации интерфейса, определенного в службе для связи с сервисом).