2016-06-29 6 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 작업이 StrictMode 위반을 트리거하는 데 사용되었지만 지금은 그렇지 않은 기억이 있습니다. 왜 그런가?

내가 다음 documentation에서 본 :

특히, JNI에서 디스크 나 네트워크 액세스가 반드시 실행되지 않습니다 호출합니다.

이유가 무엇입니까?

답변

3

SQLite는 C로 작성된 라이브러리이므로 데이터베이스 파일에 대한 모든 액세스는 실제로 JNI 호출에서 숨겨집니다.

+0

알 수 있습니다. 그런데 예전에 StrictMode를 트리거하는 설명은 무엇입니까 (예 : http://stackoverflow.com/questions/11963601/android-strictmode-policy). – Ognyan

+0

스택 추적에서 볼 수 있듯이,'SQLiteDatabase'의 구현은 명시적인 엄격 모드 검사를 추가했습니다. 이것은 아마도 모든 SQL 문이 반드시 디스크에 액세스하는 것은 아니기 때문에 아마도 제거되었을 것입니다. –