Как запустить бесконечный сервис на Android (убит сервис Foreground)? - PullRequest
0 голосов
/ 26 сентября 2018

Я создал липкий сервис Foreground, который перезапускается каждый раз, когда его убивают, кажется, он работает нормально, но я заметил, что в некоторых случаях (когда ОС его убивает) он просто не перезапускается.Как я могу заставить его перезапустить КАЖДЫЙ раз, когда его убьют?Я хочу, чтобы эта служба работала всегда.

I want it to run like those

Как и эти службы.

Это моя служба Foreground onStartCommand:

public int onStartCommand(Intent intent, int flags, int startId) {

    Intent notificationIntent = new Intent(this, MainActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,
            0, notificationIntent, 0);

    Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("InsiteMobile Service")
            .setContentText("Run the app by clicking here")
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pendingIntent)
            .build();
    Log.i("InsiteMobileLog", "Service Started");
    startForeground(1, notification);

    //do heavy work on a background thread
    //stopSelf();

    return START_STICKY;
}

Ивот как я вызываю службу в MainActivity onCreate ():

public void startService() {

    Intent serviceIntent = new Intent(this, AppService.class);
    serviceIntent.putExtra("inputExtra", "InsiteMobileService");

    ContextCompat.startForegroundService(this, serviceIntent);
}

Ответы [ 4 ]

0 голосов
/ 21 июня 2019

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

0 голосов
/ 26 сентября 2018

Вы не можете создать сервис, который всегда работает на последних версиях ОС.Но вы можете использовать ForegroundService с уведомлением , которое нельзя убить.Принцип заключается в том, что пользователь всегда должен видеть, что ваше приложение работает и потребляет ресурсы ОС.

0 голосов
/ 26 сентября 2018

В настоящее время я работаю над тем же проектом, где мне нужно, чтобы службы работали в фоновом режиме.Есть несколько вещей, о которых нам нужно заботиться1. В методе обслуживания onDestroy () запустите себя снова, используя startService Intent2. Для ОС с KitKat и ниже используйте метод onTaskRemoved (намерение); в onStartCommand () метод3. Верните START_STICKY в onStartCommand ()

И после этого вам нужно понять еще одну вещь: менеджер телефона устройства стремится убить фоновые процессы на основе политики оптимизации батареи .Проверьте настройки диспетчера телефона на тестируемом устройстве и повторите попытку.

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

0 голосов
/ 26 сентября 2018

Android Oreo имеет некоторые ограничения об услугах.Вы можете посмотреть эту ветку https://stackoverflow.com/a/47611385/4082934. Также у команды Evernote есть хорошая библиотека о фоновых сервисах, совместимых с Android Oreo (API Level 26). Библиотека JobScheduler предоставляет периодические услуги с помощью метода JobInfo.Builder.setPeriodic (long intervalMillis, long flexMillis).Минимальное рабочее время этой услуги составляет 15 минут.Некоторые руководства по обслуживанию переднего плана:

  1. https://blog.klinkerapps.com/android-o-background-services/
  2. https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...