powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Правильное выполнение задачи через определенное время
23 сообщений из 23, страница 1 из 1
Правильное выполнение задачи через определенное время
    #39145049
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!
Например задача каждые 5 минут выполнять определенное действие.
Как правильно это организовать, через таймер и таск или через handler.postDelayed?
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39145128
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через AlarmManager .
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39145568
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЧерез AlarmManager .
Тут спасибо, это лучше.

Но не понятно как он работает, вижу что в службе срабатывает onCreate, при этом происходит следующий запуск службы и не срабатывают onDestroy, onUnBind, onReBind.
Служба в приложении только одна, т.е. не создаются новые экземпляры... Объясните пожалуйста.

Я только начинаю изучать андройд студию вместе с джавой, сильно тапки не кидать.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39146750
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то непонятка происходит.
В ресивере при загрузке девайса через setRepeat задал время 60 * 60 * 1000, т.е. каждый час, а срабатывает как попало... Такое впечатление что система запомнила прошлые тестовые запуски и они тоже отрабатывают.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39146755
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, все, кажется понял
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39146991
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня этот вопрос тоже интересовал. :)
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39150688
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использую AlarmManager для ежедневных напоминаний.
Как корректно установить другое время срабатывания?
Я делаю типа вот так
Код: java
1.
2.
3.
AlarmManager am = (AlarmManager) getContext().getSystemService(getContext().ALARM_SERVICE);
PendingIntent pic = PendingIntent.getBroadcast(getContext(), 10, new Intent(getContext(), AlarmReceiver.class), 0);
am.cancel(pic);



При этом 10 - должно совпадать со значением, с которым производилась установка времени ранее значением и AlarmReceiver.class
Код: java
1.
2.
3.
4.
5.
AlarmManager am = (AlarmManager) getContext().getSystemService(getContext().ALARM_SERVICE);
Intent i = new Intent(getContext(), AlarmReceiver.class);
...
PendingIntent pi = PendingIntent.getBroadcast(getContext(), 10, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, tm, period, pi);



Все ли я правильно делаю?
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39150736
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SukhovilinВсе ли я правильно делаю?
Навскидку - да. Вопрос праздный или какие-то проблемы есть?
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151352
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanDmitry SukhovilinВсе ли я правильно делаю?
Навскидку - да. Вопрос праздный или какие-то проблемы есть?
В базе планирую дерзать список таймеров. Т.е. их будет более одного.
Опасаюсь рассинхронизации списка в безе (ее можно удалить же) и уже запущенных таймеров. В случае удаления базы таймеры совсем нельзя будет выключить.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151353
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. в случае изменения записей в безе/форме хотелось бы отрубить ВСЕ запущенные таймеры, и потом пересоздать из используя актуальные данные из базы.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151360
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я поигрался и все равно не понял почему срабатывание происходит иногда норм, а иногда не в свое время.
Вот такое было
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Calendar cal = Calendar.getInstance();
            Intent aIntent = new Intent(context, SystemService.class);
            PendingIntent aPintent = PendingIntent.getService(context, 0, aIntent, 0);
            AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60 * 60 * 1000, aPintent);
        }
    }
}


И это единственное место в проекте с алармменеджером
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151366
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
игрался с:
авторELAPSED_REALTIME
ELAPSED_REALTIME_WAKEUP
и
авторsetInexactRepeating
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151368
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Imperous,
Думаю TZ
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151372
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SukhovilinImperous,
Думаю TZ
чего-чего?
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151378
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry SukhovilinImperous,
Думаю TZ
Ан, нет, getTimeInMillis() возвращает время в UTC. Все верно.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151456
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ImperousА я поигрался и все равно не понял почему срабатывание происходит иногда норм, а иногда не в свое время.
Вот такое было
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }
    @Override
    public void onReceive(Context context, Intent intent) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            Calendar cal = Calendar.getInstance();
            Intent aIntent = new Intent(context, SystemService.class);
            PendingIntent aPintent = PendingIntent.getService(context, 0, aIntent, 0);
            AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 60 * 60 * 1000, aPintent);
        }
    }
}


И это единственное место в проекте с алармменеджером
Вот что то мне кажется, что устанавливать время в прошлое это не сильно хорошо. К моменту запуска аларма миллисекунды, полученные с календаря будут уже в прошлом. Хотя, может и не в этом дело.
Расхождение во времени запуска значительные?
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151481
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SukhovilinВ базе планирую дерзать список таймеров. Т.е. их будет более одного.
Опасаюсь рассинхронизации списка в безе (ее можно удалить же) и уже запущенных таймеров. В случае удаления базы таймеры совсем нельзя будет выключить.
Можешь сделать все через один таймер, который по выполнению своей задачи выставляет следующий.
И так любое количество раз.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151491
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanDmitry SukhovilinВ базе планирую дерзать список таймеров. Т.е. их будет более одного.
Опасаюсь рассинхронизации списка в безе (ее можно удалить же) и уже запущенных таймеров. В случае удаления базы таймеры совсем нельзя будет выключить.
Можешь сделать все через один таймер, который по выполнению своей задачи выставляет следующий.
И так любое количество раз.
Думал в эту сторону. Есть очень большой минус - придется дергать базу из места, из которого дергать ее не предполагалось.
Т.е. бродкаст ресивер будет сам в базу ходить, как то не айс.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151492
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SukhovilinТ.е. бродкаст ресивер будет сам в базу ходить, как то не айс.
Странные комплексы, но в базу могут все: ресиверы, сервисы, приложения, виджеты и т.п.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151496
Dmitry Sukhovilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadmanDmitry SukhovilinТ.е. бродкаст ресивер будет сам в базу ходить, как то не айс.
Странные комплексы, но в базу могут все: ресиверы, сервисы, приложения, виджеты и т.п.
Физически могут. Но логически не хотелось бы.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151516
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Sukhovilinwadmanпропущено...

Странные комплексы, но в базу могут все: ресиверы, сервисы, приложения, виджеты и т.п.
Физически могут. Но логически не хотелось бы.
Сделай только сервис, который может общаться с базой напрямую, а остальные работают с сервисом через интенты.
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151550
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry SukhovilinВот что то мне кажется, что устанавливать время в прошлое это не сильно хорошо. К моменту запуска аларма миллисекунды, полученные с календаря будут уже в прошлом. Хотя, может и не в этом дело.
Расхождение во времени запуска значительные?
да, даже могло быть и минуту 2 раза, могло быть и 3 раза в час, а было и тютелька в тютельку...
...
Рейтинг: 0 / 0
Правильное выполнение задачи через определенное время
    #39151551
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ImperousDmitry SukhovilinВот что то мне кажется, что устанавливать время в прошлое это не сильно хорошо. К моменту запуска аларма миллисекунды, полученные с календаря будут уже в прошлом. Хотя, может и не в этом дело.
Расхождение во времени запуска значительные?
да, даже могло быть и минуту 2 раза, могло быть и 3 раза в час, а было и тютелька в тютельку...
особенно ерунда была в первый час запуска девайса.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Правильное выполнение задачи через определенное время
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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