Dealing with (cross-process) exceptions in Android custom content provider

◇◆丶佛笑我妖孽 提交于 2019-12-20 18:42:19

问题


I have a custom content provider in my Android app that works reasonably well. I expect other apps to also access my content provider. I would like some clean way to communicate exceptions and errors, but as far as I can tell the Android content provider framework doesn't provide any way to propagate exceptions across processes.

How should I indicate an exception state to my caller? Do I have to somehow encode it into my returned data and rely on clients to check for it? Is there any alternative? If encoding into the ordinary return data is it, what's the best way? (I can see a number of alternatives for the Cursor returned by a query call, but what about the Uri returned by insert, or the int returned by update or delete?)


回答1:


There is a short list of RuntimeException subclasses which, if thrown in the provider, will be re-thrown in a client app. These include:

  • IllegalStateException
  • IllegalArgumentException
  • NullPointerException
  • SecurityException
  • BadParcelableException

A more recent update to the Parcel.writeException documentation added

  • UnsupportedOperationException
  • NetworkOnMainThreadException

Source: Creating Content Providers mentions IAE and NPE; I guessed that the others would work based on the Javadoc for Parcel.writeException.

The client app will only get the detail message, not a stack trace or the cause stack. For exceptional state which can be encoded into a String (the detail message), this is a reasonable choice.

I'm still interested in other solutions, too.



来源:https://stackoverflow.com/questions/11976611/dealing-with-cross-process-exceptions-in-android-custom-content-provider

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!