2013-08-08 5 views
1

Я занимаюсь разработкой приложения Quiz для Android. Каждый набор вопросов должен отвечать в течение определенного периода времени. Этот период времени можно измерить с помощью андроида CountDownTimer.android: Timer for Quiz app

Однако CountDownTimer приостанавливается, когда приложение больше не находится в фокусе. Что делать, если я хочу, чтобы таймер продолжал работать, даже если приложение закрыто? (Если приложение снова открыто и таймер истек, приложение должно отобразить подходящее сообщение).

ответ

0

Вы хотите создать будильник с помощью AlarmManager. Они запускаются независимо от активности на экране и даже запускаются, когда телефон спит.

+0

документация кажется рекомендовать Handler: _Примечание: Менеджер сигнализации предназначен для случаев, когда вы хотите, чтобы ваш код приложения запустить в определенное время, даже если приложение не запущено. Для обычных операций синхронизации (тиков, тайм-аутов и т. Д.) Проще и эффективнее использовать Handler._ Почему лучше работает AlarmManager? – mahela007

2

Используйте жизненный цикл вашей деятельности http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Override OnPause() метод (так называемый, когда активность свободно фокус)

  • остановить таймер
  • магазин текущее время

Переопределение OnResume() метод (так называемый, когда возвращаются активности на переднем плане)

  • вычислить истекшую задержку
  • если таймер истек: дисплей сообщение
  • еще перезапускает таймер обратного отсчета с оставшимися секундами
+0

Спасибо. Я думаю, что сначала попробую этот метод. Использование «Bundle» для хранения текущего времени будет недостаточным, потому что Bundles также потеряны, когда приложение будет убито. Какой подход я должен был использовать для хранения текущего времени? – mahela007

+0

Да, вам нужно сохранить данные Bundle в определенном файле или в настройках приложения, которые вызывают метод OnPause(), и читать данные в OnResume() – Masaharta

1

Просто Аукцион (наилучшим образом):

  1. user2553764 ответ только экономии & расчет значения таймера на основе системы. (Лучше всего подходит, просто & не требует фоновых сервисов или потоков).

  2. Использование обработчика, см. How to set a timer in android. (Official documentation предлагает использовать его для работы с таймером, хотя, похоже, излишний для вашего варианта использования).

  3. Использование услуги (bindservice), Implementing a Count down timer using Service in the background. (Но службы могут выходить из памяти, в этом случае, возможно, придется использовать его с 1-м подходом).

  4. AlarmManager, dunno, если он должен быть ниже привязанного сервиса, но он может быть использован, тем не менее. How to run a method every X seconds, предлагает использовать AlarmManager для> 10-минутных интервалов. (Также упоминается в документации по Android, как вы сказали выше).