Gizlice girmiş olabilecek gizli bir soruyu kontrol etmek için StrictMode'da uygulamamı çalıştırmaya çalışıyorum. Karşılaştığım bir sorun, ContentResolver kullanırken Leaked DatabaseConections uygulamasının yanlış bir pozitifliği gibi görünüyor. Bu bir şey olduğunu varsayıyorumAndroid StrictMode yanlış pozitif bildiriyor
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 c = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, cols, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);
c.close()
2 satır yukarıda aşağıdaki StrictMode ihlali oluşturabilir: Bazı deneylerde sonra
Aşağıdaki kod 2 satır basitleştirilmiş sorunu var İmleç bir contentProvider tarafından döndürüldüğü gerçeğine özgü (bu yüzden doğrudan bir SQLite imleci değildir).
Bu gerçekten yanlış bir pozitif mi yoksa gerçekten sızdıran bir imleç varsa herhangi bir fikir sahibi olur mu.
Honeycomb ile yayınlanan CursorLoader API'sini kullanarak benzer bir şey görüyorum. Bir CursorLoader (bir arka plan iş parçacığında sorguyu gerçekleştirir) ve bir SimpleCursorAdapter var. Prensip olarak, SimpleCursorAdapter, CursorLoader'dan yeni bir tane takas ettiğimde mevcut tüm imleci kapatmalıdır. Ancak, bu imleç sonlandırıcı StrictMode ihlallerini de görmeye devam ediyorum, bu yüzden biraz şaşırtmaca. – tomtheguvnor