2016-05-03 4 views
2

Я заявляю о своей службы в манифесте, как это:Почему моя служба остановилась, когда вы открываете приложение из рецентов?

<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).

+0

Смотрите это https://stackoverflow.com/questions/20677781/in-android-4-4-swiping -app-out-of-recent-tasks-постоянно-убивает-приложение-wi 100% поможет вам .. –

ответ

Смежные вопросы