Я заявляю о своей службы в манифесте, как это:Почему моя служба остановилась, когда вы открываете приложение из рецентов?
<service
android:name=".MyService"
android:stopWithTask="false" />
MyService.java:
public class MyService extends Service {
private final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// doing stuff
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onCreate() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_TIME_TICK);
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
// does not get called
unregisterReceiver(receiver);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
// this method get called when i remove the task from recents
}
}
Когда я красть из приложения из Недавних, onTaskRemoved
работает, как ожидалось, но BroadcastReceiver
" s onReceive
метод больше не вызван.
Насколько я знаю, срок службы BroadcastReceiver
, зарегистрированный динамически с registerReceiver
, привязан к объекту, который его зарегистрировал. Я думаю, из-за этого, если мой Service
все еще работает, предполагается, что вызывается onReceive
.
Я не уверен, что мой Service
остановлен, или BroadcastReceiver
получил незарегистрированный.
В любом случае, как я могу предотвратить их остановку, когда задача удалена из откликов? Если я не могу, есть ли способ перезапустить его немедленно?
Edit:
Я уверен, что мой Service
все еще работает, так как операционная система не пытается перезапустить его (как он должен делать, если остановлен из-за START_STICKY
), что означает, что проблема заключается в BroadcastReceiver
получил незарегистрированный. Зачем? (onDestroy
не дозвонились)
Edit2:
Нашли проблему. Это устройство, на котором я тестировал. Я использовал Xiaomi Redmi Note 2 с MIUI android ROM. Кажется, что, выкачивая из recents в MIUI, ОС убивает весь процесс (в значительной степени, как это делает убийца задачи), а не только задача. Тестирование на других устройствах Service
перезапускается сразу же после остановки задачи, как и предполагалось (из-за START_STICKY
).
Смотрите это https://stackoverflow.com/questions/20677781/in-android-4-4-swiping -app-out-of-recent-tasks-постоянно-убивает-приложение-wi 100% поможет вам .. –