Запуск службы Android при загрузке и изменении предпочтений

#android #service #alarmmanager

#Android #Обслуживание #alarmmanager

Вопрос:

Как выглядит мой код сегодня, я периодически отправляю сигнал тревоги (?), используя AlarmManager который принимается AlarmReceiver extends BroadcastReceiver , который, в свою очередь, запускает службу. Служба выполняет некоторое обновление и заканчивается stopSelf() . IMO это лучший способ периодически выполнять задачу без постоянного запуска службы. Правильно?

Однако проблема с этим кодом заключается в том, что инициируется вся цепочка событий onSharedPreferenceChanged() . Я (изначально) подумал, что это хорошая идея, поскольку все обновления включены пользователем в SharedPreferences . Теперь я пришел к выводу, что это на самом деле не очень хорошо и что мне нужно инициировать AlarmManager / AlarmReceiver / Service / что угодно, и то, и другое onPreferenceChange , но также при загрузке.

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

Пожалуйста, помогите мне, во-первых, разобраться с этим, а во-вторых, закодировать его! Заранее спасибо!

Ответ №1:

Затем создайте и зарегистрируйте, BroadcastReceiver где вы будете выполнять AlarmManager необходимые действия:

 public class YourBootReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        // do the AlarmManager here
    }
}
  

Затем, в вашем манифесте:

 <application>
    ... other stuff
    <receiver android:name=".YourBootReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
        </intent-filter>
    </receiver>
</application>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
  

Комментарии:

1. Спасибо! Как насчет моего текущего кода? Должен ли я оставить его себе? Мне кажется, что такой подход может привести к тому, что я в конечном итоге получу от alarmmanagers (каждый запускает сигналы тревоги в соответствии с заданным пользователем интервалом), заставляя обновление запускаться в два раза чаще, чем предполагалось …?