У меня есть сервис, который имеет внешние API. В некоторых случаях я должен бросить SecurityException. Странная вещь заключается в следующем: в некоторых API, когда я генерирую исключение, связыватель успешно выполняет эту транзакцию, и исключение перехватывается менеджером службы. Однако в других API исключение не достигает менеджера, потому что Binder его проглатывает. Сообщение журнала Binder выглядит следующим образом: "06-Nov 06: 04: 05.766 3632 W Вызов Binder Binder не выполнен." Как видно из кода Binder, исключение проглатывается, поскольку транзакция ЕДИНИЦАПУТЬ:
if ((flags & FLAG_ONEWAY) != 0) {
737 if (e instanceof RemoteException) {
738 Log.w(TAG, "Binder call failed.", e);
739 } else {
740 Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e);
741 }
742 } else {
743 // Clear the parcel before writing the exception
744 reply.setDataSize(0);
745 reply.setDataPosition(0);
746 reply.writeException(e);
747 }
Мне нужно переслать исключение. Я не понимаю, почему в некоторых случаях исключение пересылается, а в других - нет. Я не вижу различий между двумя типами API. Как я могу сделать так, чтобы мое исключение не было ОДНОМ, если это возможно? Пожалуйста помоги. Заранее спасибо. С уважением, Света