2016-06-29 36 views
3

在我的应用我有StrictMode以下设置:为什么StrictMode不能捕获SQLite的读/写操作?

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操作用于触发严格模式违规,但现在不是这种情况。任何想法为什么?

我在documentation看到以下内容:

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

这是原因吗?

回答

3

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

+0

我明白了。但是,过去是什么解释触发了StrictMode(就像这个问题,例如http://stackoverflow.com/questions/11963601/android-strictmode-policy)? – Ognyan

+0

如堆栈跟踪所示,'SQLiteDatabase'的实现已经添加了显式严格模式检查。这可能被删除,因为并非所有的SQL语句都必须访问该磁盘。 –

相关问题