Фильтрация нарушений Android StrictMode по длительности

Есть ли способ фильтрации нарушений StrictMode по длительности?

Это становится немного раздражающим, имея эти

StrictMode policy violation; ~duration=6 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=31 violation=1

отравление моего бревна. Я думаю, что StrictMode - полезная функция, но я бы хотел иметь дело только с нарушениями, продолжительность которых превышает, скажем, 50 мс, на первом этапе разработки.

Спасибо

1 ответ

Решение

API StrictMode не поддерживает фильтрацию по продолжительности.

Но вы можете легко сделать это, отфильтровав отчеты журнала StrictMode:


A. Настройте StrictMode для записи ошибок в журнал:

public void onCreate() {
     if (DEVELOPER_MODE) {
         StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                 .detectDiskReads()
                 .detectDiskWrites()
                 .detectNetwork()
                 .penaltyLog() //<---------- write reports to log
                 .build());
     }
     super.onCreate();
}


B. Прочитайте строки logcat:

logcat = Runtime.getRuntime().exec(new String[]{"logcat", "-d"});
br = new BufferedReader(new InputStreamReader(logcat.getInputStream()),4*1024);
String line;
  final StringBuilder log = new StringBuilder();
  String separator = System.getProperty("line.separator");
    while ((line = br.readLine()) != null) {
          filterLogLine(line)
    }
}


C. фильтрация строк по длительности:

void filterLogLine(String line) {
    use StringTokenizer to parse the line
    get value of "~duration"
    and filter if lesser than your threshold
}

Я оставляю вас, чтобы выяснить точные детали разбора строки.

Другие вопросы по тегам