сохранение фоновой службы после выхода пользователя из приложения

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

Я попытался создать службу в другом процессе, объявив ее следующим образом:

  <service
        android:name=".service.Service"
        android:enabled="true"
        android:icon="@drawable/ic_launcher"
        android:process=":my_process" >
  </service>

и onStartCommand():

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

person Nativ    schedule 20.07.2013    source источник
comment
Привет, ты нашел решение? Я искал часы, чтобы решить эту проблему, и я не смог прийти к решению. Ваш код выглядит точно так же, как мой.   -  person JustADev    schedule 17.03.2014
comment
Я решил это, просто запустив свой сервис с помощью этой строки: ContextWrapper cont = new ContextWrapper(getBaseContext()); cont.startService(service);   -  person JustADev    schedule 17.03.2014
comment
связанные stackoverflow.com/questions/ 16651009/   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.02.2016
comment
если вы покажете уведомление от этой службы, это предотвратит ее уничтожение ОС.   -  person Mohammad Ersan    schedule 03.02.2017


Ответы (4)


Согласно документации Android, вы можете добиться такого поведения, используя атрибут:

 android:isolatedProcess="true"

Кстати, я знаю, что это не ответ на вопрос, но может помочь некоторым людям — недавно я узнал о отличной сторонней библиотеке, созданной разработчиками Evernote. Он называется Android-Job и предназначен для создания заданий, которые выполняются в разных процессах и могут стать снова активен даже после перезагрузки устройства, это потрясающе.

person Nativ    schedule 19.05.2016
comment
Эта библиотека очень старая. Удобно ли будет его использовать? - person shikhar bansal; 08.02.2017
comment
Да, мы широко его используем. Не уверен, но я думаю, что время от времени появляются новые коммиты. - person Nativ; 22.07.2017
comment
Похоже, служба даже не запускается после добавления isolatedProcess=true в Oreo :( - person midhunhk; 02.08.2018
comment
Ти все еще работает для последних версий Android? - person Ahmad; 18.08.2020
comment
@Ahmad Извините за поздний ответ. Понятия не имею. Я забросил этот проект много лет назад - person Nativ; 28.09.2020

На самом деле существуют различные виды услуг, которые вы можете реализовать. Используйте службу вместо IntentService. Там вам нужно посмотреть на START_STICKY , START_NOT_STICKY и START_REDELIVER_INTENT вы можете сохранить свою службу в фоновом режиме, даже если ваша активность умирает. службы Android также обратите внимание на AIDL службы

person Viswanath Lekshmanan    schedule 14.02.2014
comment
Я использовал START_REDELIVER_INTENT, но моя служба по-прежнему останавливается, когда пользователь закрывает приложение. - person Saeed Neamati; 13.08.2015
comment
Я использовал START_STICKY, но моя служба по-прежнему останавливается, даже если приложение принудительно закрыто пользователем. - person Sabari Karthik; 21.12.2016

Для этого вы можете использовать классы Handler и Runnable.

   @Override
    public void onCreate()
    {

        Toast.makeText(context, "SMS SERVICE START", Toast.LENGTH_SHORT).show();


        handler=new Handler();
        runnable=new Runnable() {
            @Override
            public void run()
            {

                    TASK();
                    handler.postDelayed(runnable,180000);
// 3min delay
            }
        };

        handler.postDelayed(runnable,180000);
        super.onCreate();
    }

Эта задача выполняется непрерывно 3 минуты

public void TASK()
{
     //your task 

}
person rawhost    schedule 07.04.2017

Службы были разработаны для работы в фоновом режиме, нет необходимости в другом процессе.

Из документации по услугам:

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

Однако служба должна останавливаться после завершения своей работы. IntentService — это самый простой способ начать реализацию службы.

person brillenheini    schedule 21.07.2013
comment
Да, я видел эту строку, но все же каждый раз, когда я закрываю приложение, служба также уничтожается. Кстати, я не знаю, имеет ли это значение, но служба реализует OnSensorListener для прослушивания изменений акселерометров (движений..) - person Nativ; 21.07.2013
comment
@powerX Как запустить службу? Вы привязываетесь к нему или с startService? - person brillenheini; 21.07.2013
comment
Я использую startService с намерением запустить свою службу - person Nativ; 22.07.2013
comment
@powerX Извините, тогда понятия не имею. - person brillenheini; 24.07.2013