Фоновые операции, когда приложение убито?(Android API 23+) - PullRequest
0 голосов
/ 25 января 2019

Чтобы узнать что-то новое, я разрабатываю приложение для 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);
}

Работает нормально, когда приложение запускается, но как только я его убью, получатель ничего не получит. Итак, мой вопрос: как лучше всего выполнять такие фоновые операции? Есть ли другие классы, которые мне нужно сначала выучить Большое спасибо!

1 Ответ

0 голосов
/ 25 января 2019

Вам нужен фоновый сервис с уведомлением, чтобы он оставался в живых.

startForegorund()

Поиск startForegorund с уведомлением, и вы найдете то, что вам нужно.

...