2016-05-26 2 views
0

Я разрабатываю приложение, которое будет содержать расписание, когда пользователь добавит к нему какое-либо событие, которое он может определить, повторяется ли он «каждую неделю», «каждые 2 недели» и т. Д., Если каждую неделю это нормально, но когда это так, скажем «раз в месяц», мне нужно рассчитать время с момента добавления пользователем этого события и удаления события через неделю, а затем добавить его обратно через 3 недели.AlarmManager vs Handler/Timer с длинным таймером

Из моих исследований я могу использовать AlarmManager, Handler или Timer. Он должен обновляться, пока приложение не работает, но не нужно, пока телефон спит, я чувствую, что AlarmManager будет излишним для этой простой задачи, но с помощью таймера или обработчика, чтобы вычислить время с момента пользователь добавил событие, которое мне нужно, чтобы что-то вроде (time passed since the user added the event) + (time the phone was asleep), и я не уверен, как это сделать или если это возможно.

AlarmManager, Timer, Handler или другой?

ответ

2

Для вашего случая, вы должны обязательно использовать AlarmManager.

Запуск a Handler вместе с Timer следует использовать только на короткие промежутки времени. Чтобы вы были уверены, что приложение все еще работает.

AlarmManager с другой стороны должен использоваться для выполнения операций за пределами срока службы приложения, что имеет место в вашем приложении.

Обратитесь к следующей ноте, скопированной из training docs

Примечания: Для операций, которые гарантированно происходят в течение всего срока службы вашего приложения синхронизации, вместо того, чтобы рассмотреть вопрос об использовании класса Handler в сочетании с таймером и Thread. Такой подход дает Android лучший контроль над системными ресурсами.

1

Вы должны использовать AlarmManager (это вся цель AlarmManager)

Ваш таймер не будет работать, если ваше приложение не работает так, как вы ожидаете, что работать на следующей неделе, если пользователь не открывается приложение?

+0

У меня все получилось неправильно, я думал, что хендлер может работать, если приложение не было открыто, извините за плохой вопрос –