2015-09-22 6 views
0

Привет, я использую сервис на устройствах из API 15. Мне нужно поймать, когда сервис умирает сам или когда пользователь убивает приложение из задачи и остановки службы.Как поймать, когда служба умерла?

вот моя служба:

@Override 
    public void onCreate() { 
     super.onCreate(); 
     mTimerIntent = new Intent(SERVICE_TIMER_BROADCAST); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     if (intent != null){ 
      mTimerType = intent.getExtras().getInt(TIMER_TYPE_KEY); 
      mTimer.run(); 
     } 
     return START_NOT_STICKY; 
    } 

@Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.d("test", "onDestroy"); 
     setLoginStatusFailed(); 
    } 

    @Override 
    public void onTaskRemoved(Intent rootIntent) { 
     super.onTaskRemoved(rootIntent); 
     Log.d("test", "onTaskRemoved"); 
     setLoginStatusFailed(); 
    } 

    private void setLoginStatusFailed(){ 
     new USB_LogOut(getApplicationContext()); 
    } 

на KitKat устройстве он прекрасно работает, но когда я попробовал его на 4.0 это does't работа ...

Любые идеи, почему это происходит и как чтобы исправить это?

ответ

1

Услуги не могут работать 24 часа в сутки. В какой-то момент система, скорее всего, должна будет убить ваш процесс, чтобы иметь память в другом месте, и вы уйдете без звонка до onDestroy(). Позже система перезапустит процесс и службу.

Вы можете вернуть start_sticky в onStartCommand для перезапуска службы, если служба была убита системой или пользователем.

http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle

Вы можете обратиться форум Google для более подробной информации https://groups.google.com/forum/#!topic/android-developers/2DTkEk73xpk

+0

спасибо, я знаю, что это :) вопрос в том, как поймать, когда служба умер –

+0

Как я сказал в моем ответе это не возможно, чтобы получить срабатывает, когда служба уничтожается в определенных ситуациях. Просто подумайте, что система может убить некоторые службы, когда сценарий с низкой памятью приходит на сцену ... возможно, это убьет службу, и там вы активизируете, чтобы уничтожить, можно перезапустить службу программист в данный момент сам ... где какой шаг, предпринятый системой для обработки сценария, - это отходы справа .. я сказал пример ... –

+0

Извините, когда я печалью «скончался сам по себе», я имею в виду момент, когда таймер закончит и запустит команду stopSelf(). мои цели - уловить момент, когда служба умерла, но я не хочу ее перезапускать) на самом деле все это хорошо работает на устройствах 4.2, 4.4, 5.0, но не на 4.0 –