3

有没有办法根据持续时间过滤 StrictMode 违规行为?

有了这些就有点烦了

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

毒害我的logcat。

我认为 StrictMode 是一个有用的功能,但我只想在第一个开发阶段处理持续时间大于 50 毫秒的违规行为。

4

1 回答 1

2

StrictMode API 不支持按持续时间过滤。

但是您可以通过过滤 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
}

我让你弄清楚行解析的确切细节。

于 2014-07-31T10:23:35.443 回答