У меня есть служба Android, которая экспортирует интерфейс RPC через AIDL. Интерфейс ориентирован на соединение, где клиент подключается к нему, проводит с ним операции, а затем отключается при выходе.
К сожалению, клиент ненормально завершает работу, например, система будет убита, у нее никогда не будет возможности сообщить интерфейсу RPC, что соединение закрыто. Это вызывает проблемы.
Есть ли возможность для службы автоматически получать уведомления, когда новый клиент подключается и отключается от интерфейса? Я нашел onBind()
и onUnbind()
, но это не одно и то же; они говорят мне, используется ли интерфейс или нет. onUnbind()
вызывается только когда последний клиент отсоединяется.
Есть идеи? (А дизайн сервиса контролируется внешними требованиями и не может быть изменен ...)
Обновление: Я совершенно забыл упомянуть, что смотрел на linkToDeath()
, который почти делает именно то, что я хочу, но кажется, что он работает наоборот --- это позволяет клиенту получать уведомления, когда Служба умирает. Когда я попробовал, ничего не произошло. Документация немного неоднородна; Кто-нибудь знает наверняка, работает ли это так, как я хочу? И если так, как заставить его сказать мне , какой клиент умер?
Обновление обновления: Я решил эту проблему, но только путем обмана. Я переопределил это. Мое приложение на самом деле написано в основном на C с использованием NDK, отсюда и странный дизайн сервиса; Итак, я перенес проблему в мир C и создал крошечный вспомогательный процесс, который напрямую взаимодействует с нативными частями моего приложения, используя доменные сокеты Unix. Это быстро, очень мало и почти пуленепробиваемо - но все равно обманывает. Поэтому, хотя моя проблема теперь решена, я все же хотел бы знать, каков на самом деле ответ.