0

У меня есть обычный Android ServiceConnection:Почему onServiceDisconnected не получает вызов при сбоях приложений?

Я переопределение метода onServiceDisconnected() так:

private ServiceConnection myConnection = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder service) { 

    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     System.out.println("MyTag why are you not getting called"); 
    } 
}; 

и сервис переплетены и начал просто отлично. i намеренно сбой приложения после некоторого времени после подключения службы; однако, onServiceDisconnected никогда не называется - почему? в соответствии с документацией, это должно вызываться всякий раз, когда приложение падает ...

вещь, которую я пытаюсь выполнить это:

предположит, что пользователь просто утончается убивает процесс/или случайно сталкивается с сбоем, я хочу, чтобы некоторые вещи произошли (например, ... отмена уведомления ... это то, что я сейчас делаю в onStop()). но где я должен отменить уведомление? а также отключить сервис, если приложение разбилось?

+0

Я думаю, что [это] (http://stackoverflow.com/questions/971824/when-does-serviceconnection-onservicedisconnected-get-called) - это то, что вы ищете. – Dariush

ответ

2

Я никогда не видел onServiceDisconnected(...), вызванного при сбое приложения или даже при отключении активности от службы. Я думаю, что это называется только, если служба умирает, хотя никаких действий связанной деятельности, возможно, потому, что ОС решила убить ее, чтобы сохранить память. Я не знаю, как преднамеренно заставить это случиться. Вы можете попробовать добавить преднамеренный крах к вашему сервису и посмотреть, что произойдет, но я думаю, что это просто разрушит ваше приложение, если служба не будет работать в своем собственном процессе.

У меня была аналогичная необходимость в том, чтобы убедиться, что некоторые вещи произойдут, если приложение выйдет из строя или будет убито, поскольку Bluetooth на многих устройствах крайне неровный, и если сокет Bluetooth открыт при сбое приложения, адаптер можно оставить в состояние, когда он не может снова подключиться к тому же устройству/uuid, пока телефон или планшет не перезагрузится. Я обнаружил, что onDestroy() службы также не вызывается, когда приложение терпит крах, если служба не работает в своем собственном процессе. Если вы решите пойти по этому маршруту, остерегайтесь того факта, что служба наследует свою собственную копию вашего класса Application, поэтому, если вы расширили его для хранения глобальных данных, у службы будут все свои копии.

+0

да ... вижу, проблема в том, что во всех вызовах onStop() материал, который я хочу выполнить, не происходит, когда приложение падает –