安卓的开机动画和FallbackHome机制

原生逻辑

安卓开机动画结束后,在启动Launcher之前会先启动FallbackHome,之后才会启动Launcher。

其中FallbackHome是属于Settings中的一个activity,Settings的android:directBootAware=true,并且FallbackHome在category中配置了Home属性,而Launcher的android:directBootAware为false,所以只有FallbackHome可以在direct boot模式下启动。

日志中有打印其调用链,始于systemReady,最终调用到startHomeOnTaskDisplayArea()

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.RootWindowContainer.startHomeOnTaskDisplayArea(RootWindowContainer.java:1466)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.RootWindowContainer.resumeHomeActivity(RootWindowContainer.java:1647)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.Task.resumeNextFocusableActivityWhenRootTaskIsEmpty(Task.java:5484)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.Task.resumeTopActivityInnerLocked(Task.java:5434)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.Task.resumeTopActivityUncheckedLocked(Task.java:5358)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.RootWindowContainer.resumeFocusedTasksTopActivities(RootWindowContainer.java:2766)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.RootWindowContainer.resumeFocusedTasksTopActivities(RootWindowContainer.java:2705)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.wm.ActivityTaskManagerService$LocalService.resumeTopActivities(ActivityTaskManagerService.java:6854)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.am.ActivityManagerService.systemReady(ActivityManagerService.java:9324)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.SystemServer.startOtherServices(SystemServer.java:3399)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.SystemServer.run(SystemServer.java:999)

12-18 03:51:14.359 3710 3710 D PrintStack: at com.android.server.SystemServer.main(SystemServer.java:700)

上面两张图是原生CarSetting的Manifest配置。

这里的startHomeOnTaskDisplayArea()会通过intent启动对应的应用,如果已经开机并解掉用户锁,此时会优先启动launcher,这是因为FallbackHome的priority是-900。

行 124845: 12-18 03:51:16.319 3710 5175 D ActivityManagerTiming: FinishBooting

行 125933: 12-18 03:51:16.434 3710 5567 I ActivityManager: User 10 state changed from BOOTING to RUNNING_LOCKED

行 128750: 12-18 03:51:16.809 3710 5175 D ActivityManager: Started unlocking user 0

行 131151: 12-18 03:51:17.019 3710 5175 D ActivityManager: Started unlocking user 10

行 131647: 12-18 03:51:17.116 3710 5148 I ActivityManager: User 0 state changed from RUNNING_LOCKED to RUNNING_UNLOCKING

行 134771: 12-18 03:51:17.314 3710 5567 I ActivityManager: Posting BOOT_COMPLETED user #0

行 142110: 12-18 03:51:18.311 3710 5148 I ActivityManager: User 10 state changed from RUNNING_LOCKED to RUNNING_UNLOCKING

行 166953: 12-18 03:51:21.749 3710 8966 I ActivityStarter: START u10 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.flyme.auto.launcher/.main.LauncherActivity (has extras)} with LAUNCH_SINGLE_TASK from uid 0 from pkg null (BAL_ALLOW_ALLOWLISTED_UID (Important callingUid)) result code=0

综上,出现FallbackHome界面的原因是,尝试启动Launcher时,客户的系统没有解锁。

直接启动(direct boot)

借助文件级加密,Android 7.0 中引入了一项称为直接启动的新功能。该功能处于启用状态时,已加密设备在启动后将直接进入锁定屏幕。之前,在使用全盘加密 (FDE) 的已加密设备上,用户在访问任何数据之前都需要先提供凭据,以致于手机只能执行最基本的操作。例如,手机甚至无法接听电话,只能执行基本的紧急拨号操作,而且闹钟无法运行,无障碍服务也不可用。

引入文件级加密 (FBE) 以及可以使应用实现加密感知的新 API 后,这些应用将能够在受限环境中运行。这意味着,应用可以在用户提供凭据之前运行,同时系统仍能保护私密用户信息。

在启用了 FBE 的设备上,每位用户均有两个可供应用使用的存储位置:

  • 凭据加密 (CE) 存储空间,这是默认存储位置,只能在用户解锁设备后使用。
  • 设备加密 (DE) 存储空间,该存储位置在直接启动模式下和用户解锁设备后均可使用。

可选的应对方案

1.等系统解锁之后,才退出开机动画。

2.优化开机时间,使退出开机动画时,系统已解锁完毕。

3.设置directAwareBoot(参考上面截图中的CarSetting的Manifest),提前启动Launcher。但此时Launcher以及Launcher相关模块均需要设置directAwareBoot(例如widget等功能)。如果有用到SharedPreference,还需设置android:defaultToDeviceProtectedStorage="true"

相关推荐
2603_9494621031 分钟前
Flutter for OpenHarmony社团管理App实战:意见反馈实现
android·flutter
错把套路当深情1 小时前
android两种渠道支持一键打包 + 随意组合各种渠道
android
彬sir哥2 小时前
android studio如何把.gradle从C盘移到D盘
android·gradle·maven·android studio
、BeYourself3 小时前
TabLayout 与 ViewPager2 的基本使用
android·android-studio
南村群童欺我老无力.3 小时前
Flutter 框架跨平台鸿蒙开发 - 城市文创打卡:探索城市文化创意之旅
android·flutter·华为·harmonyos
Madison-No74 小时前
【Linux】文件操作&&重定向原理
android·linux·运维
2603_949462104 小时前
Flutter for OpenHarmony社团管理App实战:消息中心实现
android·javascript·flutter
andr_gale5 小时前
08_flutter中如何优雅的提前获取child的宽高
android·flutter
踏雪羽翼6 小时前
android 图表实现
android·折线图·弹窗·图表·自定义图标
有位神秘人6 小时前
Android中PopupWindow中如何弹出时让背景变暗
android