Is there a way to filter StrictMode violations based on duration?
It's getting a bit annoying having these
StrictMode policy violation; ~duration=6 ms: android.os.StrictMode$StrictModeDiskWriteViolation: policy=31 violation=1
poisoning my logcat.
I think StrictMode is a useful feature, but I'd like to deal only with violations with a duration greater than, let's say, 50 ms, in the first development phase.
The StrictMode API does not support filtering by duration.
But you can easily do so by filtering StrictMode's log reports:
A. Configure StrictMode to write errors to log:
public void onCreate() {
if (DEVELOPER_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog() //<---------- write reports to log
.build());
}
super.onCreate();
}
B. Read logcat lines:
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. filter lines by duration:
void filterLogLine(String line) {
use StringTokenizer to parse the line
get value of "~duration"
and filter if lesser than your threshold
}
I leave you to figure out the exact details of the line parsing.