Как создать постоянный фоновый сервис на Android - PullRequest
0 голосов
/ 14 декабря 2018

У меня кошмар, когда я пытаюсь создать простой фоновый сервис на Android, который работает постоянно.

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

но это не происходит

это мой манифест:

<service
        android:name=".service.MyService"
        android:description="@string/serviceDescription"
        android:directBootAware="false"
        android:enabled="true"
        android:exported="false"
        android:icon="@drawable/ic_logo"
        android:label="@string/serviceLabel"/>

Я запускаю службу на Application onCreate()

    if (MyService.getInstance() == null) {
        Intent intent = new Intent(this, MyService.class);
        startService(intent);
    }

Служба:

public void onCreate() {
        super.onCreate();
        this.workDone = 0;

        this.workerMap = new HashMap<User.UserData, Worker>(3);
        this.listeners = new HashMap<Worker, Worker.WorkerListener>(3);
        this.usernames = new HashMap<APIFacade, List<String>>(3);

        this.threadPool = Executors.newFixedThreadPool(3);
        INSTANCE = this;

    }

АБСОЛЮТНО НУДА В МОЕМ КОДЕ Я ВЫЗЫВАЮ СТОПСЕРВИС, НЕТ ОСТАНОВКИ

так почему я 'я получаю nullpointerexception в некоторых случайных ситуациях?

кто-то даже сказал мне сделать ниже код, чтобы заставить Android «перезапустить» службу

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

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

мое приложение имеет более 1000 ежедневных пользователей, и около 10% из них "находят способ" сделать нулевое исключение при использовании службы

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Ответ: ты не можешь!Текущий Android 100% мешает разработчикам предоставлять постоянные сервисы.
Раньше было возможно (но не полностью надежно) делать это вплоть до KitKat.

Самое близкое, что вы можете получить от постоянного сервиса, этоиспользуйте службу Foreground, используя метод startForeground () изнутри службы и метод startServiceForeground () (для API 26 и выше) при запуске службы.
Но даже тогда,служба все равно будет убита в какой-то момент.

Альтернативы:

  • Используйте WorkManager для выполнения задач "время от времени" (звучит как жизнеспособный вариант из того, что выописать)
  • Пользователь AlarmManager для выполнения задачи в определенное время
  • Пользователь FCM (push-сообщения) для выполнения задач, выполняемых, когда сервер сообщает.
0 голосов
/ 14 декабря 2018

Множество внутренних компонентов фоновых служб изменилось в Oreo (или это была Nougat?).Я бы ознакомился с документацией по Android:

https://developer.android.com/about/versions/oreo/background

и

https://developer.android.com/training/best-background

Возможно, вы захотите рассмотреть JobSchedulerоснова.

...