安卓的开机动画和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"

相关推荐
开发_李行7 小时前
简历对应知识点总结--专业技能5
android
网络安全许木7 小时前
自学渗透测试(1~6天工具使用的回温)
android
匆忙拥挤repeat7 小时前
Android Compose 状态保存的API总结
android
BLUcoding8 小时前
Android 生命周期详解
android
Swift社区8 小时前
鸿蒙 vs iOS / Android:谁更适合 AI?
android·ios·harmonyos
冬奇Lab8 小时前
硬件加速与 OMX/Codec2:解密编解码器的底层世界
android·音视频开发·视频编码
亘元有量-流量变现8 小时前
ASO优化全流程实操指南:从基础到迭代,精准提升App曝光与转化
android·ios·harmonyos·aso优化·方糖试玩
私人珍藏库9 小时前
【Android】GameNative 0.9.0 [特殊字符] 手机畅玩Steam游戏
android·游戏·智能手机·app·工具·软件·多功能
诸神黄昏EX9 小时前
Android Safety 系列专题【篇七:Android AVF机制】
android
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.10 小时前
MySQL 主从架构中的使用技巧及优化
android·mysql·架构