Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / AlarmManager разные функции set для разных версий SDK! / 3 сообщений из 3, страница 1 из 1
07.04.2016, 17:18
    #39210424
Pashekka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AlarmManager разные функции set для разных версий SDK!
Делая сервис, который должен запускаться через каждый час и проверять данные на сайте, выяснил для себя, что для разных версий SDK необходим разный подход.
Сначала было сделано так как нашел в примерах с помощью setRepeating.
Итог: сервис запускался когда хотел, как-то вообще игнорируя мой выбранный интервал. Если на малых промежутках времени это было приблизительно правильно, то чем больше увеличивался период запуска, тем дальше сдвигалось время запуска сервиса. Если ставил час, то только один раз сработало, и то не через час, а через 3.
Далее в ходе экспериментов на живом устройстве пришел к примеру на habrahabr.ru для запуска сервиса AlarmManager. Стало немного легче. Для периодов менее 30 мин, работало нормально, оставил девайс на ночь, посмотрел лог. Сервис запускался четко через 30 мин до 3 часов, далее тишина запуска не одного.
Затем в поисках узрел :) на странице developer.android.com
авторNote: The Alarm Manager is intended for cases where you want to have your application code run at a specific time,
even if your application is not currently running. For normal timing operations (ticks, timeouts, etc) it is easier and
much more efficient to use Handler.

Note: Beginning with API 19 (KITKAT) alarm delivery is inexact: the OS will shift alarms in order to minimize wakeups and battery use.
There are new APIs to support applications which need strict delivery guarantees; see setWindow(int, long, long, PendingIntent)
and setExact(int, long, PendingIntent). Applications whose targetSdkVersion is earlier than API 19 will continue to see the previous
behavior in which all alarms are delivered exactly when requested.
И в итоге, код получился такого вида:
Код: javascript
1.
2.
3.
4.
5.
6.
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + updatetime, pendingIntent);
        }
        else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + updatetime, pendingIntent);
        }


Вот теперь интересно, будет ли отрабатывать правильно на 4.4 и выше или нет?
Вообще необходимо что отрабатывало в конкретный промежуток времени.
...
Рейтинг: 0 / 0
07.04.2016, 17:23
    #39210431
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AlarmManager разные функции set для разных версий SDK!
PashekkaВот теперь интересно, будет ли отрабатывать правильно на 4.4 и выше или нет?
Остается только это выяснить. :) будет хорошо, если поделишься выводами.
...
Рейтинг: 0 / 0
07.04.2016, 18:09
    #39210493
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AlarmManager разные функции set для разных версий SDK!
предлагаю читать документацию, там четко написано с какой версии что работает не так как раньше. с 6.0 там еще веселее
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / AlarmManager разные функции set для разных версий SDK! / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]