为什么 StrictMode 不捕获 SQLite 的 read/write 操作?
Why StrictMode does not catch read/write operations by SQLite?
在我的应用程序中,我对 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 中看到了以下内容:
Notably, disk or network access from JNI calls won't necessarily trigger it.
是这个原因吗?
SQLite 是一个用 C 编写的库,因此所有对数据库文件的访问确实隐藏在 JNI 调用中。
在我的应用程序中,我对 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 中看到了以下内容:
Notably, disk or network access from JNI calls won't necessarily trigger it.
是这个原因吗?
SQLite 是一个用 C 编写的库,因此所有对数据库文件的访问确实隐藏在 JNI 调用中。