Обработка исключений (кросс-процессов) в пользовательском контенте Android
У меня есть пользовательский контент-провайдер в моем приложении для Android, который работает достаточно хорошо. Я ожидаю, что другие приложения также получат доступ к моему провайдеру контента. Я бы хотел, чтобы какой-то чистый способ общаться с исключениями и ошибками, но насколько я могу судить, инфраструктура поставщика контента Android не предоставляет никакого способа распространения исключений между процессами.
Как указать состояние исключения для моего вызывающего? Должен ли я каким-то образом закодировать его в мои возвращенные данные и полагаться на клиентов, чтобы проверить его? Есть ли альтернатива? Если кодирование в обычные данные о возврате - это лучший способ? (Я вижу несколько альтернатив для Cursor
, возвращаемых вызовом query
, но как насчет Uri
, возвращаемого insert
, или int
, возвращаемого update
или delete
?)
Ответы
Ответ 1
Существует короткий список подклассов RuntimeException
, которые, если их бросить в провайдер, будут повторно загружены в клиентское приложение. Это:
-
IllegalStateException
-
IllegalArgumentException
-
NullPointerException
-
SecurityException
-
BadParcelableException
Источник: Создание поставщиков контента упоминает IAE
и NPE
; Я догадался, что остальные будут работать на основе Javadoc для Parcel.writeException
.
Клиентское приложение получит только подробное сообщение, а не трассировку стека или стек причин. Для исключительного состояния, которое может быть закодировано в String
(подробное сообщение), это разумный выбор.
Меня все еще интересуют другие решения.