Я использую oreo 8.1.0.
Я столкнулся со странной проблемой, решение которой я не могу найти в stackoverflow, поэтому я пишу этот вопрос. Я знаю одно решение, которое через службу переднего плана, я могу реализовать его, но я не нахожу уведомление удобным для пользователя в контексте моего приложения.
Я опишу мою проблему, используя два случая.
Случай 1:
Когда пользователь открывает мое приложение, нажимая на значок и удаляя его из последних приложений, служба автоматически перезапускается. Это хорошо.
Случай 2:
Здесь мое приложение закрыто и отсутствует в последних приложениях.
Когда пользователь копирует текст, моя служба запускает одно из действий моего приложения, но когда он удаляет его из последних приложений, моя служба останавливается навсегда.
Так что моя проблема заключается во втором случае, я не хочу, чтобы мой сервис был убит. Даже если он будет убит, я хочу, чтобы он перезапустился.
Я перепробовал все методы, упомянутые в стеке, такие как START_STICKY и onTaskRemoved, но я не могу заставить его работать.
Даже я пытался убить свою активность, когда пользователь нажимает на кнопку недавнего приложения и удаляет ее из последних приложений программным способом, но это также не работает.
Хотя это перезапускает сервис даже во втором случае, когда пользователь убивает мое приложение с помощью кнопки назад.
Эта часть кода относится к деятельности, которая открывается, когда пользователь копирует какой-либо текст.
@Override
public void finish() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
super.finishAndRemoveTask();
} else {
super.finish();
}
}
Эта часть кода принадлежит службе, которая запускает действие.
@Override
public void onTaskRemoved(Intent rootIntent){
Log.d("testing 12","onTaskRemoved");
Intent restartServiceTask = new Intent(getApplicationContext(),CBWatcherService.class);
restartServiceTask.setPackage(getPackageName());
PendingIntent restartPendingIntent =PendingIntent.getService(getApplicationContext(), 1,restartServiceTask, PendingIntent.FLAG_ONE_SHOT);
AlarmManager myAlarmService = (AlarmManager) getApplicationContext().getSystemService(this.ALARM_SERVICE);
myAlarmService.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartPendingIntent);
super.onTaskRemoved(rootIntent);
}
@Override
public int onStartCommand(Intent intent,int flag,int startId){
super.onStartCommand(intent, flag, startId);
return START_STICKY;
}
РЕДАКТИРОВАТЬ 1
Мне просто нужен сервис, чтобы остаться в живых. Вот вещи, которые не будут мешать работе пользователя в моем случае приложения
1. Уничтожение действия программным способом при вызове onPause, чтобы служба не была убита, допустимо, если вы сделаете это
2. Отображение уведомления в течение нескольких секунд приемлемо
3. Перезапуск услуги допустим