Android12.0进入默认Launcher前黑屏的解决办法

发布于:2024-10-18 ⋅ 阅读:(41) ⋅ 点赞:(0)

在Android 11.0和12.0系统中,进入默认Launcher前出现2秒的黑屏问题,可能由多种因素导致。以下是一些针对此问题的解决办法:

一、优化Launcher的启动过程

  1. 减少Launcher的onCreate方法中的耗时操作
    • Launcher的mainActivity的onCreate方法中可能包含一些耗时的操作,这些操作会延长Launcher的启动时间,从而导致黑屏。可以将这些耗时操作放到子线程中执行,或者优化这些操作的执行效率。
  2. 设置启动画面
    • 创建一个启动画面的布局文件,并在应用程序的主题中设置该启动画面。当Launcher启动时,首先显示启动画面,然后再切换到Launcher的主界面。这可以掩盖部分黑屏时间,提升用户体验。

二、调整系统开机动画的结束时间

  1. 延迟开机动画的结束时间
    • 在开机动画的代码中,增加一个标志位来控制开机动画的结束时间。当Launcher显示第一个窗口时,再结束开机动画。这可以确保开机动画在Launcher完全启动后再结束,避免黑屏现象。
  2. 修改WindowManagerService的相关代码
    • 在WindowManagerService中,调整与开机动画结束相关的代码逻辑。确保在Launcher启动并显示第一个窗口后,再调用相关方法结束开机动画。

三、处理FallbackHome导致的黑屏问题

  1. 了解FallbackHome的作用
    • FallbackHome是原生Android设置中的一个Activity,它配置了DirectBoot模式。在Launcher启动之前,系统会先启动FallbackHome。如果用户未解锁设备,FallbackHome会一直显示,直到收到ACTION_USER_UNLOCKED广播后再启动Launcher。
  2. 优化FallbackHome的启动逻辑
    • 如果产品不需要锁屏功能,可以考虑将Launcher设置为DirectBoot模式,从而让Launcher优先加载启动,避免FallbackHome导致的黑屏时间。

涉及代码

frameworks\base\cmds\bootanimation\BootAnimation.cpp
   frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java
   frameworks\base\services\core\java\com\android\server\am\ActivityRecord.java