gpt4 book ai didi

Android StrictMode 报告误报

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:06 24 4
gpt4 key购买 nike

我一直在尝试在 StrictMode 中运行我的应用程序,以检查是否存在任何可能已经潜入的隐藏问题。我遇到的一个问题是在使用 ContentResolver 时似乎是 Leaked DatabaseConnections 的误报。

经过一些实验将问题简化为以下两行代码:

Cursor c = context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, cols, null, null, MediaStore.Video.Media.DEFAULT_SORT_ORDER);

c.close()

上面的两行产生了以下 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 游标)。

如果这确实是误报或确实存在泄漏游标,是否有人知道。

最佳答案

我想我可以解释问题出在哪里。当您查询数据库时,您会收到异常。因此,将创建一个 Cursor c.close() 将不会被调用,因为存在异常。因此,您必须将 Cursor 的创建放在 try catch block 中,并在 finally block 中关闭 curson。

关于Android StrictMode 报告误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6141172/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com