我目前正在大量修改/重写一个Android应用程序,并且我看到了一个非常偶然的崩溃,如下所示:调用了一个CursorAdapter
方法,它调用了AbstractWindowedCursor#checkPosition()
,并且:
02-20 15:03:18.180 E/AndroidRuntime(17143): android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.CursorWrapper.getLong(CursorWrapper.java:106)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.widget.CursorAdapter.getItemId(CursorAdapter.java:220)
问题是,我们没有关闭任何Cursor
s。我们所有的Cursor
s 都来自CursorLoader
s ,反过来又是由 a 产生的ContentProvider
。我们从 中Cursor
分别传递到每个中,我们在 中注册通知,我们从每个中通知,并且...简而言之,我找不到任何理由说明 a在使用时会关闭。CursorAdapter
LoaderCallbacks
Cursor
ContentProvider
ContentResolver
insert(...)
delete(...)
update(...)
Cursor
那么: a 的其他原因是StaleDataException
什么?