【问题标题】:Why StrictMode does not catch read/write operations by SQLite?为什么 StrictMode 不捕获 SQLite 的读/写操作?
【发布时间】:2016-06-29 10:42:32
【问题描述】:

在我的应用中,我对 StrictMode 进行了以下设置:

    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
            .detectDiskReads()
            .detectDiskWrites()
            .detectNetwork()
            .penaltyLog()
            .penaltyDeath()
            .build());

在某些时候,我注意到我很少有 SQLite 操作没有放在单独的线程中的地方,但它们不会触发 StrictMode 违规。 我已经在使用 Android 5.1.1 的真实设备和使用 4.4.4 和 5.1.1 的 Genymotions 上进行了测试,结果相同。 我记得 SQLite 操作用于触发 StrictMode 违规,但现在情况并非如此。知道为什么吗?

我在documentation看到了以下内容:

值得注意的是,来自 JNI 调用的磁盘或网络访问不一定会触发它。

是这个原因吗?

【问题讨论】:

    标签: android sqlite android-strictmode


    【解决方案1】:

    SQLite 是用 C 编写的库,因此对数据库文件的所有访问确实隐藏在 JNI 调用中。

    【讨论】:

    • 我明白了。但是,过去触发 StrictMode 的解释是什么(例如在这个问题中,例如 stackoverflow.com/questions/11963601/android-strictmode-policy)?
    • 如堆栈跟踪所示,SQLiteDatabase 的实现添加了明确的严格模式检查。这可能已被删除,因为并非所有 SQL 语句都必须访问磁盘。
    猜你喜欢
    • 1970-01-01
    • 2019-08-03
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2021-07-07
    • 2016-02-04
    相关资源
    最近更新 更多