在我的Android应用程序上,我们有一个带有几个表的ContentProvider
,每个内容解析器调用都是针对相同的URI列表(每个表一个)完成的,所有这些都在测试环境时工作正常。我无法重现这个错误,但是从GooglePlay中我们每隔一段时间就会遇到这个错误:
java.lang.IllegalArgumentException: Unknown URL content://com.myapp.urimanager.data/location
at android.content.ContentResolver.delete(ContentResolver.java:818)
at com.myapp.geo.GeocodeProvider$MyHandler.handleMessage(GeocodeProvider.java:225)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)
此崩溃的具体行只是对DB的简单DELETE
请求:
long when = System.currentTimeMillis() - (3 * MONTH);
String where = DbLocation.COL_TS + "<" + Long.toString(when);
int rowsDeleted = context.getContentResolver().delete(myUri, where, null);
myUri
是对崩溃URI的引用,并且在清单上正确声明了ContentProvider:
<provider
android:name=".geo.ContentManager"
android:authorities="com.myapp.urimanager.data"
android:enabled="true"
android:exported="false"
android:multiprocess="true"/>
正如我所说,我无法在办公室重现这种情况,但这种情况并不经常发生,但仍会崩溃。
这种情况发生在每个Android版本(2.3.7,4.04,4.1,4.2,4.3,4.4)和各种设备(Sony Xperias,Samsung Galaxy,Moto,Alcatel,LG Optimus等)上。
有人知道为什么会这样吗?
我知道我可以简单地try-catch
来电,但我不相信这是正确的方法,因为它只会将崩溃推迟到下一个电话会议({{1} }是每个应用程序启动时启动的清理序列。)