Продолжить обслуживание, даже если приложение удалено из приложения Недавние

У меня небольшая проблема.

В моем приложении служба запускается после успешного входа пользователя. Ранее сервис необходимо было остановить, если приложение было убито. (скажем, удалили из списка недавних приложений, проведя пальцем по экрану.) Итак, мы использовалиandroid:stopWithTask="true", Теперь нам нужно, чтобы Служба работала как есть, даже если Задача, которая ее запустила, удаляется из списка Недавние приложения. Поэтому я изменил Сервис, чтобы включитьandroid:stopWithTask="false", Но это не похоже на работу.

Связанный код:

Вот часть манифеста, относящаяся к Сервису:

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

В MyService.java:

public class MyService extends AbstractService {

    @Override
    public void onStartService() {
        Intent intent = new Intent(this, MyActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        Notification notification = new Notification(R.drawable.ic_launcher, "My network services", System.currentTimeMillis());
        notification.setLatestEventInfo(this, "AppName", "Message", pendingIntent);
        startForeground(MY_NOTIFICATION_ID, notification);  
    }

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        Toast.makeText(getApplicationContext(), "onTaskRemoved called", Toast.LENGTH_LONG).show();
        System.out.println("onTaskRemoved called");
        super.onTaskRemoved(rootIntent);
    }
}

AbstractService.java это пользовательский класс, который расширяетSevrice:

public abstract class AbstractService extends Service {

    protected final String TAG = this.getClass().getName();

    @Override
    public void onCreate() {
        super.onCreate();
        onStartService();
        Log.i(TAG, "onCreate(): Service Started.");
    }

    @Override
    public final int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStarCommand(): Received id " + startId + ": " + intent);
        return START_STICKY; // run until explicitly stopped.
    }

    @Override
    public final IBinder onBind(Intent intent) {
        return m_messenger.getBinder();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        onStopService();
        Log.i(TAG, "Service Stopped.");
    }    

    public abstract void onStartService();
    public abstract void onStopService();
    public abstract void onReceiveMessage(Message msg);

    @Override
    public void onTaskRemoved(Intent rootIntent) {
        Toast.makeText(getApplicationContext(), "AS onTaskRemoved called", Toast.LENGTH_LONG).show();
        super.onTaskRemoved(rootIntent);
    }
}

Теперь, если я вхожу в приложение, MyService запускается. После этого я нажимаю кнопку «Домой», чтобы приложение переместилось в фоновый режим. Теперь я удаляю приложение из списка последних приложений. В то время ядолжен см. сообщение Toast и console согласно описанию этого метода:

public void onTaskRemoved (намерение rootIntent)

Добавлено в API уровень 14

Это вызывается, если служба в данный момент работает, и пользователь удалил задачу, которая поступает из приложения службы. Если вы установили ServiceInfo.FLAG_STOP_WITH_TASK, вы не получите этот обратный вызов; вместо этого служба будет просто остановлена.

Параметры rootIntent Исходное корневое намерение, которое использовалось для запуска удаляемой задачи.

Но я не вижу ничего из этого. Служба возвращается START_STICKY вonStartCommand, Я так думаюonTaskRemoved должен быть уволен вместе с флагомandroid:stopWithTask="false".

Я что-то пропустил?

Дайте мне знать, если мне нужно добавить код, который может быть важен, чтобы выяснить, что не так.

P.S .: Я проверял это на 4.2.2 до сих пор.

P.S .: Я только что протестировал тот же код в 4.1.2, в котором служба продолжает работать, и я получаю сообщение «onTaskRemoved named» в журнале тоже.

Что я должен сделать, чтобы это работало во всех версиях?

Ответы на вопрос(5)

Ваш ответ на вопрос