WedX - журнал о программировании и компьютерных науках

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

Это мой сервис:

public class KeepAliveService  extends Service {
Alarm alarm = new Alarm();
public void onCreate()
{
    Log.i("","KEEPALIVE onCreate");
    super.onCreate();
    Notification notification = new Notification();
    startForeground(1337, notification);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    alarm.setAlarm(this);
    Log.i("","KEEPALIVE onCreate start command");
    return START_STICKY;
}

@Override
public void onStart(Intent intent, int startId)
{
    alarm.setAlarm(this);
    Log.i("","KEEPALIVE onStart");
}

@Override
public IBinder onBind(Intent intent)
{
    return null;
}
}

У меня есть это в моем манифесте:

   <service
        android:name="com.vidyo.vidyomod.KeepAliveService"
        android:exported="true"
        android:process=":KeepAliveService"
        android:enabled="true">
    </service>
    <receiver android:process=":remote" android:name="com.vidyo.vidyomod.utils.Alarm"></receiver>
    <receiver android:name="com.vidyo.vidyomod.utils.AutoStart">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"></action>
        </intent-filter>
    </receiver>

И я начинаю это так:

    Intent i= new Intent(BaseActivity.this, KeepAliveService.class);
    startService(i);

Но когда я очищаю свои приложения из списка приложений (телефонный квадрат), я получаю эти журналы, и после этого службы больше не работают:

05-16 14:52:22.698: I/ActivityManager(1102): Killing 9049:com.vidyo.vidyomod:KeepAliveService/u0a132, isShadow:false (adj 2): stop com.vidyo.vidyomod
05-16 14:52:22.725: D/ActivityManager(1102): SVC-handleAppDiedLocked: app = ProcessRecord{ff18702 9049:com.vidyo.vidyomod:KeepAliveService/u0a132, isShadow:false}, app.pid = 9049
05-16 14:52:22.726: W/ActivityManager(1102): Scheduling restart of crashed service com.vidyo.vidyomod/.KeepAliveService in 1000ms
05-16 14:52:22.726: V/BroadcastQueue(1102): removeReceiverListLocked app = ProcessRecord{ff18702 9049:com.vidyo.vidyomod:KeepAliveService/u0a132, isShadow:false}
05-16 14:52:22.726: V/BroadcastQueue(1102): removeReceiverListLocked app = ProcessRecord{ff18702 9049:com.vidyo.vidyomod:KeepAliveService/u0a132, isShadow:false}
05-16 14:52:22.726: V/BroadcastQueue(1102): removeReceiverListLocked app = ProcessRecord{ff18702 9049:com.vidyo.vidyomod:KeepAliveService/u0a132, isShadow:false}
05-16 14:52:22.857: I/ActivityManager(1102):   Force stopping service ServiceRecord{3c2a0a1 u0 com.vidyo.vidyomod/.KeepAliveService, isShadow:false}
05-16 14:52:22.859: W/ActivityManager(1102): Spurious death for ProcessRecord{ff18702 0:com.vidyo.vidyomod:KeepAliveService/u0a132, isShadow:false}, curProc for 9049: null

РЕДАКТИРОВАТЬ:

Теперь в моей деятельности я делаю это:

    Intent i= new Intent(VidyoModApplication.this, KeepAliveService.class);
    startService(i);

И в моем Сервисе, в onStardComand, я делаю это:

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    alarm.setAlarm(this);
    Log.i("","KEEPALIVE onCreate start command");
    Intent notificationIntent = new Intent(Intent.ACTION_MAIN);
    notificationIntent.addCategory(Intent.CATEGORY_HOME);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

    Notification notification = new Notification.Builder(this)
            .setContentTitle(getText(R.string.app_name))
            .setContentText("Service is running")
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(pendingIntent)
            .build();

    startForeground(1337, notification);
    return START_STICKY;
}

Но все же, когда я принудительно закрываю приложение, оно останавливает службу. Попробовал, найдя этот пример: https://www.truiton.com/2014/10/android-foreground-service-example/


  • На какой версии Android вы это тестируете? 17.05.2017
  • 4.2.2, 5 и 6 17.05.2017
  • На каких устройствах вы тестируете? 17.05.2017
  • A LeEco Le2, LG G5, Nexus 5 и Minix X9-LX. Важно, чтобы он работал на бокс-сете Minix X9-LX, работающем под управлением 4.2.2. связанные с тв-боксом или старой ОС 17.05.2017
  • Я хочу исправить, после EDIT, он работает на G5 и Nexus5, он ломается на LeEco Le2 и ТВ-боксе minix x9-lx 17.05.2017

Ответы:


1

Я собираюсь пойти на конечность здесь. Я не знаю конкретных устройств, которые вы используете. Однако на многих устройствах есть специальная страница настроек для «защищенных» или «специальных» приложений, которым разрешено работать в фоновом режиме. Если у вас есть одно из этих устройств, и ваше приложение НЕ находится в списке «защищенных» приложений, а ваше Service убито, Android НЕ перезапустит его, даже если вы объявили его приоритетным Service и вернули START_STICKY из onStartCommand().

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

См. https://stackoverflow.com/a/41369032/769265 и https://stackoverflow.com/a/42120277/769265

18.05.2017
  • Спасибо большое, буду анализировать 18.05.2017
  • это оно. Я проверил ваш ответ как правильный, потому что моего приложения не было в списке защищенных приложений 18.05.2017
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]