一、开机向导引起的短暂黑屏
在系统中默认是有开机向导的,首次开机会首选进入开机向导,然后进入锁屏桌面,如果某些原因引起开机向导卡顿,会造成短暂黑屏。
可以修改如下:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
再在产品mk中去掉这两个app:
packages/apps/OneTimeInitializer
packages/apps/Provision
在build的handheld_product.mk中参与编译这两个apk
$(call inherit-product, $(SRC_TARGET_DIR)/product/media_product.mk)
/product packages
PRODUCT_PACKAGES +=
Camera2
DeskClock
LatinIME
Launcher3QuickStep
OneTimeInitializer
Provision
Music
Settings
SettingsIntelligence
StorageManager
SystemUI
WallpaperCropper
frameworks-base-overlays
PRODUCT_PACKAGES_DEBUG +=
frameworks-base-overlays-debug
修改如下:
build\make\target\product\handheld_product.mk
$(call inherit-product, $(SRC_TARGET_DIR)/product/media_product.mk)
/product packages
PRODUCT_PACKAGES +=
Camera2
DeskClock
LatinIME
Launcher3QuickStep \
- OneTimeInitializer \
- Provision
Music
Settings
SettingsIntelligence
StorageManager
SystemUI
WallpaperCropper
frameworks-base-overlays
PRODUCT_PACKAGES_DEBUG +=
frameworks-base-overlays-debug
这样让系统直接启动桌面,不用启动Provision。Provision的作用和SetupWizard、OneTimeInitializer类似,都是设置DEVICE_PROVISIONED和USER_SETUP_COMPLETE.
二、开机动画资源引起的黑屏
-
- 系统首次开机时,由于需要加载相当多的系统数据和服务,首次开机耗时会长一些,如果开机动画过少,在播放完开机动画以后,还没等我AMS执行完停止播放动画的相关通知,就会陷入黑屏状态,等得到AMS停止播放动画以后才会进入桌面。在项目中遇到开机动画只有几张的情况,就会出现首次开机黑屏。我们只需要把开机动画增加到30张左右就可以解决这个问题。
-
- 一些朋友会将bootanimation.zip解压然后更换动画文件,在重新压缩为bootanimation.zip,但实际多了一层嵌套bootanimation\bootanimation导致开机黑屏,一些不合理的desc.txt文件设置也会导致黑屏。
desc.te参数说明:
//参数: 宽:480 ;高:480 ;帧率 :1
480 480 1
//默认: p;循环次数:1;图像渲染后delay时间:0 文件路径:folder1
p 1 0 part0
p 0 0 part1
- 一些朋友会将bootanimation.zip解压然后更换动画文件,在重新压缩为bootanimation.zip,但实际多了一层嵌套bootanimation\bootanimation导致开机黑屏,一些不合理的desc.txt文件设置也会导致黑屏。
第二行和第三行,设置顺序播放和无限循环播放
第一个参数p是google default的设计,请保留以p开头。
第二个参数1表示这一行对应folder所需要循环播放的次数,如果是0则表示是无限循环播放,直到系统ready后通过被动退出。
第三个参数0表示这一行对应folder里面的每一帧图片依次解析渲染完成后,要进入下一个循环,动画这个线程需要pause多久。
第四个参数folder1 表示对应设置规则的folder的path。
三、FallbackHome引起的黑屏 开机启动Launcher黑屏
开机以后,设备会有一个“android正在启动”这样的弹框,这个界面是一个叫FallbackHome的Activity来展示的。FallbackHome机制是Android系统启动过程中的一种降级处理机制。当系统启动时,如果默认的Launcher应用无法正常加载或出现错误,系统会自动启用FallbackHome来替代默认Launcher。但一般为了改善产品体验,最终决定移除弹窗页面,直接进入默认的Launcher,避免弹窗对用户界面的干扰。
FallbackHome机制:
1.默认Launcher故障检测:系统会检测默认的Launcher应用是否能够正常加载和运行。如果检测到故障,系统将启动FallbackHome。
2.解锁过程中的弹窗:在系统解锁之前,可能会出现一个"Android正在启动"的弹窗页面,用于指示系统正在加载和准备。这个弹窗页面通常出现在桌面壁纸上,用户需要等待系统完全解锁后才能进入默认的Launcher。
去掉FallbackHome的效果实际上是让FallbackHome的view不显示,然后开机启动动画延长一下,直到系统解锁后再停止开机动画,完成这样较为顺滑的过渡。
方案:
1、跳过FallbackHome
// Set ourselves totally black before the device is provisioned so that
// we don't flash the wallpaper before SUW
mProvisioned = Settings.Global.getInt(getContentResolver(),
Settings.Global.DEVICE_PROVISIONED, 0) != 0;
final int flags;
++ mProvisioned = true;`