存在几个SystemUI启动失败导致的黑屏问题
问题1:Q项目systemui先NE后ANR,anr的时候杀了刚起的systemui,导致systemui没有启动
//先发生NE
12-17 13:35:35.559 13579 13579 F DEBUG : pid: 4265, tid: 4265, name:ndroid.systemui >>> com.android.systemui <<<
//后发生ANR
12-17 13:35:51.417 1321 1352 I am_anr :[0,4265,com.android.systemui,952647181,Broadcast of Intent {act=android.intent.action.SCREEN_OFF flg=0x50200010 }]
12-17 13:36:08.463 1321 3078 V ActivityManager: Death received in com.android.server.am.ActivityManagerService$AppDeathRecipient@306636cfor thread android.os.BinderProxy@d8b6d35,mPid:4265,mApp:ProcessRecord{1ee44a6 4265:com.android.systemui/u0a62}
//NE先挂掉,所以会重启
12-17 13:36:09.001 1321 3078 I am_proc_died:[0,4265,com.android.systemui,-800,6]
12-17 13:36:09.012 1321 3078 W ActivityManager: Re-adding persistent process ProcessRecord{1ee44a6 4265:com.android.systemui/u0a62}
//收到ANR,杀进程,设置process Record中的pendingStart =false,当前的pid已经设置为0了
12-17 13:36:09.026 1321 1352 I ActivityManager: Killing 0:com.android.systemui/u0a62 (adj -800): bg anr
12-17 13:36:09.045 550 550 D Zygote : Forked child process 13818
12-17 13:36:09.048 1321 1353 W ActivityManager: ProcessRecord{1ee44a60:com.android.systemui/u0a62} start not valid, killing pid=13818, pendingStart=false;
//启动的时候发现pendingStart被人设置为false导致handleProcessStartedLocked直接退出
12-17 13:36:09.054 550 550 I Zygote : Process 13818 exited due to signal 9 (Killed)
//走进去的时候,app.pid为0
12-17 13:36:09.026 1321 1352 I ActivityManager: Killing 0:com.android.systemui/u0a62 (adj -800): bg anr
/
问题根本是启动进程的时候不持锁了,此时kill了systemui异步启动进程,导致杀进程和启进程同步进行了。
修改方法:
frameworks/base/services/core/java/com/android/server/am/ProcessRecord.java
void kill(String reason, @Reason int reasonCode, @SubReason int subReason, boolean noisy) {
if (!killedByAm) {
if (pid > 0) {
......
}else{
///modify start
if(!( mPersistent && info != null && "com.android.systemui".equals(info.packageName))) {
pendingStart = false;
} else {
Slog.i(TAG, "Skipping set pendingStart = false for " + info.packageName);
}
//modify end
}
}
}
/
问题2:高负载下,system UI无法唤醒,手机无法使用
//ANR当前pid 还是1565
09-29 13:51:36.222180 1185 15843 I am_anr : [0,1565,com.an