Android FallbackHome导致的黑屏问题

本文分析了Android 9.0设备开机时出现短暂黑屏现象的原因,问题与系统在启动launcher前先启动FallbackHome有关。FallbackHome是一个透明无界面的Activity,与DirectBoot模式有关。解决方案包括为FallbackHome添加加载界面或延长开机动画时间。
摘要由CSDN通过智能技术生成

问题描述:在android9.0的机器上,重启设备之后,开机动画结束之后,在launcher 拉起来之前,总是会黑个几秒钟,很影响用户体验.

研究问题:

1.刚开始认为是系统或者launcher发生了crash,然后黑屏,然后launcher重启

但是抓了一份完整的log之后发现并没有相关crash的相关信息.同时我又下载了个第三方的桌面,重启之后仍然有黑屏的现象,所以说这个和launcher本身是没有关系的.

2.那接下来就继续分析log了.

12-31 11:00:01.385 2868 2868 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.android.tv.settings/.system.FallbackHome} from uid 0

12-31 11:00:03.831 2868 2882 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.oversea.aslauncher/.ui.main.MainActivity} from uid 0
发现系统在启动launcher之前,会先启动一下Settings里面的FallBackHome,看源码可知这是一个透明无界面的activity.然后两秒之后才会启动我们的launcher. 那按照这个线索分析,为什么会先启动这个fallbackhome呢?

先来缕一下系统启动完成之后启动launcher的流程:

1.ActivityManagerService.systemReady()

当systemserver将各项系统服务启动完成之后,这些system server会走对应的systemReady函数.而和启动launcher相关的是AMS的systemReady:

public void systemReady(final Runnable goingCallback, TimingsTraceLog traceLog) {
traceLog.traceBegin(“PhaseActivityManagerReady”);
/省略无数行代码*****/
startHomeActivityLocked(currentUserId, “systemReady”);
/省略无数行代码*****/
traceLog.traceEnd(); // PhaseActivityManagerReady

}

boolean startHomeActivityLocked(int userId, String reason) {
if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL
&& mTopAction == null) {
// We are running in factory test mode, but unable to find
// the factory test app, so just sit around displaying the
// error message and don’t try to start anything.
return false;
}
Intent intent = getHomeIntent(); //获取当前的homeIntent
ActivityInfo aInfo = resolveActivityInfo(intent, STOCK_PM_FLAGS, userId);
if (aInfo != null) {
intent.setComponent(new ComponentName(aInfo.applicationInfo.packageName, aInfo.name));
// Don’t do this if the home app is currently being
// instrumented.
aInfo = new ActivityInfo(aInfo);
aInfo.applicationInfo = getAppInfoForUser(aInfo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android framework

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值