Как вызвать метод OnDestroy () или OnTaskRemoved () службы - PullRequest
0 голосов
/ 23 мая 2019

У меня проблема с использованием сервиса.

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

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

    serviceInstance = this;
    callHelper = new CallHelper(this);

    callHelper.start();

    return START_STICKY;
}    

@Override
public void onDestroy() {
    Log.d("1111111111", "stop service");
    super.onDestroy();
    setAlarmTimer();
}

@Override
public void onTaskRemoved(Intent rootIntent) {
    Log.d("1111111111", "stop remove");
    super.onTaskRemoved(rootIntent);
}

protected void setAlarmTimer() {
    final Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    c.add(Calendar.SECOND, 1);
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(this, 0,intent,0);

    AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), sender);
}

Но если я удаляю (удаляю) приложение из недавнего списка приложений, то OnDestroy () или OnTaskRemoved службы не вызывается. Так что не могу вызвать AlarmManager.

Ниже приводится мой Manifest.xml:

<service
    android:name=".service.CallTrackService"
    android:enabled="true"
    android:exported="true"
    android:stopWithTask="false"/>   

Как вызвать метод OnDestory() или OnTaskRemoved() службы при удалении приложения из недавнего списка приложений?

Если вы знаете эту проблему, пожалуйста, предоставьте решение.

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

В классе Service есть метод onTaskRemoved(), который запускается при удалении приложения из последних приложений.

Там служба может позвонить stopSelf(), чтобы отключиться.

Как в:

@Override
public void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
    stopSelf();
}

редактировать

в Android Oreo, запустите свой сервис следующим образом:

startForegroundService(new Intent(context, your_service.class));
0 голосов
/ 23 мая 2019

Ты не. Фреймворк делает. Связанная служба разрушается, когда с ней больше ничего не связано. Запущенная служба уничтожается, когда она явно останавливается или когда системе требуются ресурсы. Чтобы явно остановить службу, вызовите stopService из любого контекста или stopSelf из службы.

Но "я пытаюсь использовать фоновый сервис с постоянно работающим." Не возможно в современном Android. Система очистит вас от ресурсов. Невозможно заставить его работать постоянно или даже псевдо-постоянно с пропусками по тревоге. Что бы вы ни хотели, чтобы ваш сервис на самом деле делал, вам нужно найти другой путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...