Обработка исключений (кросс-процессов) в пользовательском контенте Android

У меня есть пользовательский контент-провайдер в моем приложении для Android, который работает достаточно хорошо. Я ожидаю, что другие приложения также получат доступ к моему провайдеру контента. Я бы хотел, чтобы какой-то чистый способ общаться с исключениями и ошибками, но насколько я могу судить, инфраструктура поставщика контента Android не предоставляет никакого способа распространения исключений между процессами.

Как указать состояние исключения для моего вызывающего? Должен ли я каким-то образом закодировать его в мои возвращенные данные и полагаться на клиентов, чтобы проверить его? Есть ли альтернатива? Если кодирование в обычные данные о возврате - это лучший способ? (Я вижу несколько альтернатив для Cursor, возвращаемых вызовом query, но как насчет Uri, возвращаемого insert, или int, возвращаемого update или delete?)

Ответ 1

Существует короткий список подклассов RuntimeException, которые, если их бросить в провайдер, будут повторно загружены в клиентское приложение. Это:

  • IllegalStateException
  • IllegalArgumentException
  • NullPointerException
  • SecurityException
  • BadParcelableException

Источник: Создание поставщиков контента упоминает IAE и NPE; Я догадался, что остальные будут работать на основе Javadoc для Parcel.writeException.

Клиентское приложение получит только подробное сообщение, а не трассировку стека или стек причин. Для исключительного состояния, которое может быть закодировано в String (подробное сообщение), это разумный выбор.

Меня все еще интересуют другие решения.