WatchDog启动流程中我们讲到,WatchDog启动时会启动名为watchdog的mThread线程,本节我们分析该线程的run函数,也作为WatchDog系列的最后一篇。

long timeout = CHECK_INTERVAL;//30s
// Make sure we (re)spin the checkers that have become idle within
// this wait-and-check interval
for (int i=0; i<mHandlerCheckers.size(); i++) {HandlerChecker hc = mHandlerCheckers.get(i);// 这里会在新的线程执行,所以循环很快会出去hc.scheduleCheckLocked();}

这部分会遍历mHandlerCheckers元素的scheduleCheckLocked函数,Handler Checker详解中已经对该函数做过详细分析,这里不再赘述。

                long start = SystemClock.uptimeMillis();while (timeout > 0) {if (Debug.isDebuggerConnected()) {debuggerWasConnected = 2;}try {mLock.wait(timeout);// Note: mHandlerCheckers and mMonitorChecker may have changed after waiting} catch (InterruptedException e) {Log.wtf(TAG, e);}if (Debug.isDebuggerConnected()) {debuggerWasConnected = 2;}timeout = CHECK_INTERVAL - (SystemClock.uptimeMillis() - start);}

这一段比较简单,其实就是wait 30秒。

                final int waitState = evaluateCheckerCompletionLocked();if (waitState == COMPLETED) {// The monitors have returned; resetwaitedHalf = false;continue;} else if (waitState == WAITING) {// still waiting but within their configured intervals; back off and recheckcontinue;} else if (waitState == WAITED_HALF) {if (!waitedHalf) {Slog.i(TAG, "WAITED_HALF");waitedHalf = true;// We've waited half, but we'd need to do the stack trace dump w/o the lock.pids = new ArrayList<>(mInterestingJavaPids);doWaitedHalfDump = true;} else {continue;}} else {// something is overdue!blockedCheckers = getBlockedCheckersLocked();subject = describeCheckersLocked(blockedCheckers);allowRestart = mAllowRestart;pids = new ArrayList<>(mInterestingJavaPids);}

30秒后判断是否有HandlerChecker处于overdue状态,如果有的话将收集相关日志,此部分较为简单不再详述。

本章完。

Android WatchDog(4) - watchdog线程(Android 12)相关推荐

  1. android不能在主线程,android.os.NetworkOnMainThreadException 在4.0之后谷歌强制要求连接网络不能在主线程进行访问(示例代码)...

    谷歌在4.0系统以后就禁止在主线程中进行网络访问了,原因是: 主线程是负责UI的响应,如果在主线程进行网络访问,超过5秒的话就会引发强制关闭, 所以这种耗时的操作不能放在主线程里.放在子线程里,而子线 ...

  2. Android AsyncTask两种线程池分析和总结

    转自:http://bbs.51cto.com/thread-1114378-1-1.html Android AsyncTask两种线程池分析和总结 (一)    前言 在android Async ...

  3. Android中使用Thread线程出现的问题

    很多初入Android或Java开发的新手对Thread.Looper.Handler和Message仍然比较迷惑,衍生的有HandlerThread.java.util.concurrent.Tas ...

  4. android使用动画画心形,Android中利用画图类和线程画出闪烁的心形,送给亲爱的他(她)...

    本文讲解主要涉及的知识点: 1.线程控制 2.画图类 3.心形函数 大家先看图片: 因为前一段时间在写画图类,刚好有一个线程控制画图闪烁的,我就想说我能不能做一个心形闪烁的,出来的效果就如图,先贴再讲 ...

  5. Android项目:手机安全卫士(12)—— 通讯卫士之电话短信黑名单设置与拦截

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android项目:手机安全卫士(12)-- 通讯卫士之电话.短信黑名单设置与拦截 1 介绍 今天进入新的功能开发了:通讯卫士, ...

  6. android 开启一个定时线程_Android异步、延迟和定时任务的简易用法

    异步多线程 延迟触发 循环定时触发 一.前言 项目开发中一定会用到网络请求,文件读写,开启子线程进行耗时操作,延迟返回或关闭提示框,轮询接口获取处理结果,子线程发送内容到主线程更新界面等等.碰到这些问 ...

  7. android中暂停服务,Android暂停服务,线程,Asynctask?使用postdelayed的处理程序呢?...

    我有后台服务(Service→Thread→Timer→Asynctask). Timer每5秒执行一次Asynctask.如果Asynctask返回true,则发送通知.Android暂停服务,线程 ...

  8. android 组件 线程,Android UI线程和非UI线程

    UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的 ...

  9. Android中进程与线程

    常说的主线程(UI线程)是什么? 当一个Android程序刚启动的时候,我们的android系统就会启动一个带有一个单一线程的linux进程.默认情况下,所有的组件比如Activity都运行在同样的一 ...

  10. android 主线程调用,Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

最新文章

  1. VTK:可视化之ColorSeriesPatches
  2. 类的继承python 简明_[简明python教程]学习笔记2014-05-04
  3. (Docker实战) 第2篇:Centos7 拉取和部署Gitlab
  4. 关于计算机游戏的英语读法,关于电脑游戏的英语作文
  5. Atitit 人脸识别 眼睛形态 attilax总结
  6. JSP 中 forward 转发 和 sendRedirect 重定向的区别
  7. DLL Care破解版|DLL Care(DLL修复工具)破解版下载(附激活码)
  8. 关于Pycharm进行pytorch分布式训练代码
  9. Sqlserver与Oracle 10g数据类型对照
  10. 知识图谱下图神经网络、图计算、图数据、图数据库未来发展趋势如何?
  11. nvidia控制面板点了没反应win7_nvidia控制面板点击没反应 - 卡饭网
  12. 关于利用rundll32执行程序的分析
  13. 嵌入式软件测试——1.简介
  14. 可视化编程语言_可视化编程语言影响图
  15. springboot添加切面
  16. RNN神经网络模型综述
  17. Kubernetes 的 CI/CD 管道概述
  18. OFBIZ分享:如何让OFBIZ使用中文界面
  19. Unity jobsystem 和 burst编译器代码演示及效率测试
  20. ReactNative系列之十九表情emoji与文字混排的两种方案实现

热门文章

  1. (毕业设计资料)基于单片机FM数字收音机电路系统
  2. Oracle删除链接用户
  3. 小学五年级趣味计算机课程,新媒体联盟 | 五年级小学段课程记——项目研究乐游学 趣味活动展风采...
  4. 华为S2300 配置
  5. ubuntu 更换主题
  6. WINDOWS XP sp2 Platfrom SDK下载地址
  7. [Paper-Preview1]Global and Quadratic Convergence of Newton Hard-Thresholding Pursuit
  8. Apple Watch字体大小设置 苹果手表改字体大小方法
  9. 不花钱使用google keyword planner(关键字规化器)
  10. 数据库中的触发器的实例讲解