美文网首页
StrictMode是怎样监控主线程I/O的?

StrictMode是怎样监控主线程I/O的?

作者: 来自地球的专项测试 | 来源:发表于2016-06-06 12:43 被阅读316次

    setThreadPolicy之后就会调用下面这个函数,分别是“setBlockGuardPolicy”用于保存线程规则到Java代码的。而“Binder.setThreadStrictModePolicy"则是保存线程规则到Binder, 在跨进程调用中也可以触发的Thread Policy并处理。注意的是,研究了半天代码,发现后者基本上就是保存而已,并没有进行是否主线程I/O的判断。

    那跟着,我们就重点说说Java的setBlockGuardPolicy, 通过设置BlockGuard,线程规则和对应的处理方式通过全局变量threadPolicy保存下来。

    当需要使用的时候,则调用BlockGuard.getThreadPolicy来获取规则设置

    使用的时候很简单,例如在BlockGuardOS.java(全部文件接口的实现)去执行BlockGuard.getThradPolicy().onWriteToDisk()来处理这否主线程I/O并执行生成crash或者获取堆栈。

    BlockGuardOs.java

    正如上面所说,下面就是onWriteToDisk真实处理的代码,可以看到它会打印堆栈。

    除了文件,数据库也进行了主线程I/O的监控, 通过一切数据库操作入口:execute函数执行applyBlockGuardPolicy,达成了同步去监控是否有主线程读写并产生对应处理的效果。

    SQLiteConnection.java

    相关文章

      网友评论

          本文标题:StrictMode是怎样监控主线程I/O的?

          本文链接:https://www.haomeiwen.com/subject/evwrdttx.html