Чтобы узнать что-то новое, я разрабатываю приложение для Android (min API SDK версии 23 и Target SDK Version API 28), которое позволяет мне и моей семье создавать и обмениваться виртуальным списком покупок через запросы HTTP и ответы JSON на бесплатный веб. Все работает нормально, но я хочу добавить функцию: я хотел бы получать уведомления, когда кто-то вносит изменения, даже если приложение убито или никогда не запускалось. Я знаю, что задача может сделать, чтобы сравнить изменения, внесенные в список, и я также знаю, что это нужно делать раз в 5 минут (например), но я не знаю, как выполнять фоновые операции, когда приложение больше не работает, и он был убит из списка недавних задач. Я попробовал класс Service, но когда приложение убито, оно останавливается. Поэтому я искал решение и нашел BroadcastReceiver и сделал его способным принимать сообщения всякий раз, когда Служба останавливается, чтобы перезапустить его. Но из Android API 26 BroadcastReceiver должен быть (я думаю ..) зарегистрированным по контексту.
Так вот, что я делаю в своей основной деятельности, когда вызывается метод onCreate :
ReceiverCall receiver = new ReceiverCall();
registerReceiver(receiver, new IntentFilter("com.dadex.familyapp.startServiceRequest"));
My ReceiverCall , расширяющий класс BroadcastReceiver:
public class ReceiverCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
try{
String action = intent.getAction();
if (action.equals("com.dadex.familyapp.startServiceRequest"))
context.startService(new Intent(context, CheckListService.class));
}
catch (Exception e){
Log.e("ERROR", e.getMessage());
}
}
}
А это мой CheckListService onDestroy метод:
@Override
public void onDestroy() {
Intent intent = new Intent("com.dadex.familyapp.startServiceRequest");
sendBroadcast(intent);
}
Работает нормально, когда приложение запускается, но как только я его убью, получатель ничего не получит. Итак, мой вопрос: как лучше всего выполнять такие фоновые операции? Есть ли другие классы, которые мне нужно сначала выучить Большое спасибо!