Я пытаюсь создать пользовательский секундомер, который подсчитывается в android. Он должен быть довольно точным до 0,1 с и с пользовательской компоновкой и изображениями для примера цифр: DIGITS.Android Timer/Секундомер с пользовательским интерфейсом и удовлетворительной производительностью
Он также должен иметь возможность запускаться в фоновом режиме после того, как приложение было сведено к минимуму или закрыто. Чтобы быть более конкретным, заставить приложение оставаться открытым во время включения таймера (я не знаю, как это сделать).
До сих пор я пытался использовать Handlers, Runnables, scheduleExecutorService и класс Chronometer для Android.
У обработчиков были проблемы с производительностью, пережевывание на 45%> использование процессора (я думаю, это связано с постоянным обновлением пользовательского интерфейса?). Мне удалось заставить его работать с использованием запланированногоExecutorService со скромной производительностью, но он все еще имеет проблемы с продолжением в фоновом режиме или во время изменений ориентации.
Я пытаюсь создать нечто похожее на секундомер по умолчанию на HTC one M7. Он работает в фоновом режиме и во время изменений ориентации, не теряя времени.
Таймер будет в своем собственном фрагменте в действии с использованием макета ViewPager и скользящей вкладки.
Это работоспособным для секундомера
public Runnable run() {
return new Runnable() {
@Override
public void run() {
centiseconds++;
if (centiseconds > 9) {
centiseconds = 0;
seconds++;
}
if (seconds > 59) {
seconds = 0;
minutes++;
}
if (minutes > 59) {
minutes = 0;
hours++;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateCustomUI();
}
});
}
};
}
В фрагменте я затем инициализировать scheduledExecutorService
ScheduledFuture scheduledFuture;
ScheduledExecutorService scheduledExecutorService;
Для запуска таймера
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(run(), 0, 100, TimeUnit.MILLISECONDS);
и остановить его
scheduledFuture.cancel(true);
Если вы выключили дисплей, или ваше приложение работает в фоновом режиме, ваш код не будет работать, потому что Android остановит его и ваш счетный код также остановится. Используйте CountDownTimer вместо собственного кода второго счета. – Robert
Это было бы полезно только для подсчета голосов? Как бы реализовать его для подсчета UP? (как в секундомере). –
Прочитайте документацию, после чего вы увидите, что существует метод 'onTick()', который может быть запущен за 1000 миллисекунд. – Robert