赞
踩
最近公司新项目是基于android 10的产品,需要更换一些原生的app,发现首次刷机后开机动画播完会进入一个黑屏界面,过10s左右才会进入开机引导界面,就抓log分析发现当前是FallbackHome,可看dumpsys 信息,如下
$ adb shell dumpsys activity activities | grep Resume
state=RESUMED stopped=false delayedResume=false finishing=false
mResumedActivity: ActivityRecord{9bcec35 u0 com.android.settings/.FallbackHome t2}
ResumedActivity:ActivityRecord{9bcec35 u0 com.android.settings/.FallbackHome t2}
ResumedActivity: ActivityRecord{9bcec35 u0 com.android.settings/.FallbackHome t2}
然后就了解FallbackHome,关于FallbackHome大家可自行百度或google了解。
现在问题来了,如何解决黑屏问题?
解决方案:延长开机动画,当FallbackHome消失时结束开机动画。
修改方案:
1.找到 frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
private void performEnableScreen()函数:
............
if (!mBootAnimationStopped) {
Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, "Stop bootanim", 0);
// stop boot animation
// formerly we would just kill the process, but we now ask it to exit so it
// can choose where to stop the animation.
//start 屏蔽系统结束开机动画的代码
//SystemProperties.set("service.bootanim.exit", "1");
//end
mBootAnimationStopped = true;
}
2.重新设置系统结束开机动画的代码
frameworks/base/services/core/java/com/android/server/am/ActivityRecord.java
找到ActivityRecord构造函数,如下:
ActivityRecord(ActivityTaskManagerService _service, WindowProcessController _caller,
.............
- //start 添加代码,结束开机广播
- if (isHomeIntent(intent) && shortComponentName != null && shortComponentName.contains("FallbackHome")) {
- SystemProperties.set("service.bootanim.exit", "1");
- Log.d(TAG, "real home....." + shortComponentName);
- }
3.frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
搜索service.bootanim.exit
注释调这行
//property_set("service.bootanim.exit", "1");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。