Android: запуск службы в BOOTUP, а затем планирование запуска службы каждые 10 минут?

1

Я хотел бы, чтобы служба запускалась при загрузке, а затем запускалась каждые 10 минут.

Любые идеи, как я об этом говорю?

Если при загрузке я могу заставить расписание на 10 минут, но я полагаю, мне нужно будет планировать это каждый раз при загрузке, потому что после перезагрузки все расписания будут потеряны?

Любая помощь действительно ценится

благодаря

  • 0
    «Я полагаю, мне нужно будет планировать это каждый раз при загрузке, потому что после перезагрузки все расписания будут потеряны?» - вам нужно запланировать свои тревоги AlarmManager при первом запуске приложения после установки и при перезагрузке. Вы также можете захотеть иметь несколько смарт-карт для перепланирования сигналов тревоги, если вы определите, когда ваше приложение запускается вручную, что сигнал тревоги не запустился слишком долго (например, пользователь нажал Force Stop в настройках вашего приложения).
  • 0
    Спасибо CommonsWare, поэтому я все еще слушаю BOOT_COMPLETED и затем планирую тревогу с AlarmManager?
Теги:
android-service
android-intent

2 ответа

1

Там хороший маленький учебник здесь, что объясняет, как запустить службу во время загрузки, который просто продолжают работать и в какой - то очередной интервал делает что - то (записывает в лог - файл, в случае учебника).

Как указывает @CommonsWare, это создает ненужную нагрузку на систему. Лучшим подходом является планирование повторяющегося сигнала тревоги с помощью AlarmManager, как описано в этом потоке. Вы можете зарегистрировать свое приложение, чтобы получать широковещательную передачу BOOT_COMPLETED (как описано в предыдущем учебнике), а в расписании ответа - тревогу.

  • 0
    Первый урок демонстрирует вечный сервисный паттерн. Для «запуска службы при загрузке, а затем ее запуска по расписанию каждые 10 минут», вечная служба не нужна, и пользователи часто и громко жаловались на службы, забивающие их устройства. Пожалуйста, пожалуйста, пожалуйста, пожалуйста, используйте AlarmManager для этого.
  • 0
    @CommonsWare - я согласен. Я отредактировал свой ответ, чтобы подчеркнуть последний подход.
0

в моем приложении я зарегистрировал широковещательный приемник по ACTION_BOOT_COMPLETED Intent для получения уведомления о завершении загрузки устройства. Чтобы достичь результата, вы должны указать в своем файле манифеста следующее:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
...
<receiver
 android:name=".YOUR_BROADCAST_RECEIVER">
 <intent-filter>
  <action android:name="android.intent.action.BOOT_COMPLETED" />
 </intent-filter>
</receiver>

В BroadcastReceiver я начал службу с

public void onReceive(Context context, Intent intent) {
 context.startService(new Intent(context, serviceClass));
 ...
}

Наконец, в onStartCommand службы

public int onStartCommand(Intent intent, int flags, int startId) {
 ...
 setNextSchedule();
 ...
}

private void setNextSchedule() {
 long time = WHEN_YOU WANT_THE SERVICE TO BE SCHEDULED AGAIN;
 AlarmManager am = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
 PendingIntent pi = PendingIntent.getService(this, 0,new Intent(this, this.getClass()), PendingIntent.FLAG_ONE_SHOT);
 am.set(AlarmManager.RTC_WAKEUP, time, pi);
}

AlarmManger будет использовать ожидающее намерение отправить на ваш сервис намерение, которое вы передали. Посмотрите здесь

пока

Ещё вопросы

Сообщество Overcoder
Наверх
Меню