Итак, я написал Сервис и активность для ОС Android.
Моя служба работает в собственном процессе, поэтому вся связь между моими действиями и службой происходит через IPC. Для этого я использую стандартный механизм Android.aidl.
Пока все работает нормально. Тем не менее, AIDL генерирует все заглушки методов, используя "throws RemoteException", поэтому мне приходится их обрабатывать.
Я быстро использовал grep для всего исходного кода Android и нашел только три случая, когда это исключение когда-либо бросали. Они находятся в другой службе, с которой я не подключаюсь.
Я также проверил C-источники, потому что теоретически RemoteExceptions могут быть сгенерированы с использованием интерфейса JNI. Ничего не появилось.
У меня сложилось впечатление, что все просто обрабатывают их следующим образом:
try {
mService.someMethodCall (someArguments);
} catch (RemoteException e) {
e.printStackTrace();
}
Это не прочный код, и я не хочу, чтобы что-то подобное в моей базе кода.
Кроме того: я попытался запустить RemoteException через IPC самостоятельно, и все, что у меня было, это трассировка стека и сообщение системного журнала, которое сообщает мне, что исключения еще не поддерживаются. В моем приложении никогда не было исключения, а службы, которые выбрасывали исключение, оказались в очень странном состоянии (на полпути): - (
Вопросы:
-
Убираются ли эти исключения?
-
Кто-нибудь видел такой блок try-catch, улавливающий RemoteException?
-
Может ли быть, что они не существуют и что мы просто вынуждены иметь дело с ними, потому что "throws RemoteException" является мертвым кодом или левым в компиляторе AIDL?
Disclamer: Я не читал весь исходный код. Я использовал Grep, чтобы найти случаи RemoteException, поэтому я, возможно, пропустил некоторые из-за использования разных пробелов.