3

在我的应用程序中,我对 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 违规,但现在情况并非如此。知道为什么吗?

我在文档中看到以下内容:

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

是这个原因吗?

4

1 回答 1

3

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

于 2016-06-29T11:52:45.750 回答