Возможно, вы захотите проверить 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 для проверки возможности подключения после многих часов работы, и я использовал обработчики вместе с распечатками журналов при каждом их срабатывании.
- Если вам нужен этот таймер, чтобы он работалЯ рекомендую поместить это в сервис, который продлится дольше чем деятельность.Зарегистрируйте свою деятельность в службе (реализуя интерфейс, определенный в службе для связи со службой).