Фильтрация нарушений 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
}
Я оставляю вас, чтобы выяснить точные детали разбора строки.