Я пытался запустить свое приложение в StrictMode, чтобы проверить наличие скрытых проблем, которые могли проникнуть. Одна проблема, с которой я столкнулся, - это то, что при использовании ContentResolver кажется ложным положительным результатом Leaked DatabaseConections.
После некоторых экспериментов проблема была упрощена до следующих двух строк кода:
Cursor c = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, cols, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);
c.close()
2 строки выше генерируют следующее нарушение StrictMode:
ERROR/StrictMode(26219): Releasing cursor in a finalizer. Please ensure that you explicitly call close() on your cursor:
ERROR/StrictMode(26219): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
ERROR/StrictMode(26219):
at android.database.CursorWindow.<init>(CursorWindow.java:62)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:403)
at android.content.ContentResolver.query(ContentResolver.java:302)
Я предполагаю, что это что-то специфическое для факта, что Cursor был возвращен contentProvider (так что это не прямой курсор SQLite).
Есть ли у кого-нибудь понимание, действительно ли это ложный положительный результат или действительно дырявый курсор.