亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android Watchdog 實現剖析

2020-04-11 12:42:29
字體:
來源:轉載
供稿:網友
系統啟動過程圖:
 
Framework層所有的Service都是運行在SystemServer進程中;SystemServer進程是由Zygote進程創建。
SystemServer進程啟動分兩個過程init1創建Service和進程狀態對象;init2創建Framework層的Service,將其加入到ServiceManager中,最后啟動launcher;
Android提供了Watchdog類,用來監測Service是否處于正常工作中,是在SystemServer中啟動的。
下面看一下SystemServer中Watchdog這個過程。
SystemServer.java:
復制代碼 代碼如下:

public void run() {
//初始化Watchdog 傳入各個Service作為參數
Watchdog.getInstance().init(context, battery, power, alarm,
ActivityManagerService.self());
//啟動Watchdog
Watchdog.getInstance().start();
}

Watchdog類實現
類繼承結構:
 
看到Watchdog是一個Thread,運行在SystemServer進程中,單例模式;
HeartbeatHandler處理接受監控的對象(Service),運行在主線程中;
Monitor提供監控接口,接受監控對象實現此接口;
XXXService具體實現的檢測對象。
執行流程:
 
對外接口
初始化:
復制代碼 代碼如下:

public void init(Context context, BatteryService battery,
PowerManagerService power, AlarmManagerService alarm,
ActivityManagerService activity) {
//存儲Service對象,運行在同一個進程中
mResolver = context.getContentResolver();
mBattery = battery; mPower = power;
mAlarm = alarm; mActivity = activity;
//注冊廣播
context.registerReceiver(new RebootReceiver(),
new IntentFilter(REBOOT_ACTION));
mRebootIntent = PendingIntent.getBroadcast(context,
, new Intent(REBOOT_ACTION), 0);
……
//開機時間
mBootTime = System.currentTimeMillis();
}

注冊監控對象:
復制代碼 代碼如下:

public void addMonitor(Monitor monitor) {
synchronized (this) {
//將監控對象加入到列表中
mMonitors.add(monitor);
}
}

搜索一下此函數的調用,表示被監控;看到在如下Service中實現Watchdog的Monitor接口:
ActivityManagerService
InputManagerService
NetworkManagementService
PowerManagerService
WindowManagerService
都有調用:Watchdog.getInstance().addMonitor(this);
Watchdog線程執行函數:
復制代碼 代碼如下:

public void run() {
boolean waitedHalf = false;
while (true) {
//監測完成標志
mCompleted = false;
//發送監測消息
mHandler.sendEmptyMessage(MONITOR);
synchronized (this) {
long timeout = TIME_TO_WAIT;
long start = SystemClock.uptimeMillis();
while (timeout > 0 && !mForceKillSystem) {
//休眠等待檢查結果
wait(timeout); // notifyAll() is called when mForceKillSystem is set
timeout = TIME_TO_WAIT - (SystemClock.uptimeMillis() - start);
}
if (mCompleted && !mForceKillSystem) {
//檢查結果OK
waitedHalf = false;
continue;
}
//在進行檢查一次
if (!waitedHalf) {
ActivityManagerService.dumpStackTraces(true, pids, null, null,
NATIVE_STACKS_OF_INTEREST);
waitedHalf = true;
continue;
}
}
//表明監控對象有問題
// If we got here, that means that the system is most likely hung.
// First collect stack traces from all threads of the system process.
// Then kill this process so that the system will restart.
//保存stack信息
……
// Only kill the process if the debugger is not attached.
if(!Debug.isDebuggerConnected()) {
if(SystemProperties.getInt("sys.watchdog.disabled", 0) == 0) {
//kill當前進程SystemServer
Process.killProcess(Process.myPid());
System.exit(10);
}
}
waitedHalf = false;
}
}

在此run函數中循環發送消息,判斷標志是否正常,決定檢測對象是否正常工作。
若監測對象不正常工作,則收集重要的stack信息保存下來,然后重啟SystemServer。
監測消息的處理:
是在HeartbeatHandler中進行,看看消息處理函數。
復制代碼 代碼如下:

public void handleMessage(Message msg) {
switch (msg.what) {
case MONITOR: {
// See if we should force a reboot.
//監測對象是否正常工作中……
final int size = mMonitors.size();
for (int i = 0 ; i < size ; i++) {
//調用監測對象的monitor接口
mCurrentMonitor = mMonitors.get(i);
mCurrentMonitor.monitor();
}
//走到這里表明監測對象正常
synchronized (Watchdog.this) {
mCompleted = true;
mCurrentMonitor = null;
}
} break;
}
}

判斷監測對象是否正常工作,通過調用監測對象實現的接口monitor,看看這個接口該如何執行的。
PowerManagerService中:
public void monitor() {
//判斷Service是否發生死鎖,如果發生死鎖,程序將在此一直等待//主要是線程間同步問題 造成死鎖
synchronized (mLocks) { }
}
以上便是Watchdog監測Service是否正常工作的流程;我們也可以使用Watchdog來監測別的資源如內存等使用情況。
這個Watchdog給我們提供了一種思路,一種框架,對程序正常運行或者資源的正常使用情況等的一種監測機制。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女999| 亚洲欧美制服丝袜| 国产91在线播放精品91| 欧美激情视频网站| 国产91色在线播放| 国产日韩欧美视频在线| 性色av一区二区三区免费| 91成人天堂久久成人| 91在线|亚洲| 亚洲美女在线观看| 91九色综合久久| 亚洲日韩欧美视频一区| 日韩免费观看av| 国产精品高潮呻吟久久av野狼| 欧美最猛性xxxxx亚洲精品| 亚洲欧美www| 国产精品av免费在线观看| 国产自摸综合网| 高清欧美性猛交xxxx| 亚洲免费中文字幕| 色阁综合伊人av| 欧美日韩在线观看视频小说| 亚洲最大激情中文字幕| 青青精品视频播放| 久久91亚洲精品中文字幕| 日韩av电影国产| 韩剧1988在线观看免费完整版| 91精品免费看| 成人写真福利网| 91精品综合视频| 久久亚洲影音av资源网| 久久精品夜夜夜夜夜久久| 日韩av中文字幕在线播放| 久久久久久久久久久久久久久久久久av| 欧美激情极品视频| 国产精品一区二区av影院萌芽| 日韩人体视频一二区| 久久99久国产精品黄毛片入口| 精品夜色国产国偷在线| 亚洲韩国欧洲国产日产av| 一区二区日韩精品| 欧美激情综合色综合啪啪五月| 91成人天堂久久成人| 91亚洲国产成人久久精品网站| 国产精品亚洲视频在线观看| 亚洲综合在线做性| 国产精品福利在线观看网址| 97色在线视频| 韩国一区二区电影| 在线电影欧美日韩一区二区私密| 日韩高清不卡av| 日韩中文视频免费在线观看| 5566日本婷婷色中文字幕97| 国产色综合天天综合网| 亚洲成人aaa| 国产精品99久久久久久久久| 国语自产偷拍精品视频偷| 中日韩美女免费视频网址在线观看| 国产在线观看一区二区三区| 国产亚洲欧美日韩精品| 国产日韩欧美综合| 亚洲国产精彩中文乱码av在线播放| 久久久久久久久久久免费精品| 综合av色偷偷网| 欧美精品中文字幕一区| 久久久久成人精品| 国产免费观看久久黄| 色婷婷综合久久久久| 欧美高清不卡在线| 日本欧美在线视频| 日韩一二三在线视频播| 日本不卡高字幕在线2019| 亚洲激情自拍图| 久久久人成影片一区二区三区| 久久国产精品久久精品| 日韩精品极品视频| 日韩av在线不卡| 亚洲网在线观看| 亚洲偷欧美偷国内偷| 日韩在线小视频| 亚洲午夜精品视频| 欧美精品videosex牲欧美| 亚洲人午夜精品| 亚洲精品美女在线观看播放| 日韩中文视频免费在线观看| 国产精品国产福利国产秒拍| 欧美老女人性视频| 国产精品91久久| 亚洲偷熟乱区亚洲香蕉av| 琪琪亚洲精品午夜在线| 性色av一区二区三区免费| 亚洲激情视频在线观看| 日韩一区二区欧美| 久久精品一本久久99精品| 国产999精品久久久影片官网| 国产一区二区丝袜高跟鞋图片| 国产欧美精品一区二区三区-老狼| 亚洲成人a**站| 国产精品a久久久久久| 久久香蕉频线观| 国内揄拍国内精品| xxxx欧美18另类的高清| 成人h片在线播放免费网站| www.日韩欧美| 97视频在线观看亚洲| 欧美激情国内偷拍| 亚洲免费成人av电影| 日韩av观看网址| 亚洲社区在线观看| 欧美诱惑福利视频| 午夜精品国产精品大乳美女| 欧美激情在线观看视频| 亚洲欧美在线一区| 国产一区二区三区在线观看视频| 欧美亚洲成人网| 丰满岳妇乱一区二区三区| 国产精品成人av在线| 欧美日韩国产影院| 亚洲视频在线免费看| 激情懂色av一区av二区av| 久久人人爽人人爽人人片亚洲| 最近2019中文字幕大全第二页| 69av成年福利视频| 国产欧美日韩免费看aⅴ视频| 日韩国产精品亚洲а∨天堂免| 日韩美女av在线| 疯狂做受xxxx欧美肥白少妇| 久久精品视频99| 欧美激情区在线播放| 亚洲另类图片色| 美女黄色丝袜一区| 国产精品久久久久久搜索| 亚洲人午夜精品| 国产一区二区日韩精品欧美精品| 久久99久久99精品免观看粉嫩| 久久久电影免费观看完整版| 欧美午夜精品久久久久久久| 91久久在线视频| 久久久女人电视剧免费播放下载| 亚洲国产欧美一区二区三区久久| 97涩涩爰在线观看亚洲| 91久久在线观看| 久久精品电影网| 成人免费观看网址| 97精品伊人久久久大香线蕉| 日韩精品极品视频免费观看| 日韩中文字幕在线精品| 欧美裸体男粗大视频在线观看| 亚洲毛片在线观看.| 97av在线视频免费播放| 欧美精品第一页在线播放| 国产精品国产三级国产aⅴ9色| 国产精品高清免费在线观看| 亚洲国产精品女人久久久| 国产精品偷伦免费视频观看的| 91亚洲va在线va天堂va国| 亚洲天堂免费观看| 日韩欧美亚洲成人| 成人免费淫片视频软件| 欧美日韩综合视频| 人妖精品videosex性欧美| 久久激情视频免费观看| 中文国产亚洲喷潮| 美女撒尿一区二区三区|