Direct Boot研究

为了支持Dierect Boot模式,系统提供了两个存储数据的地方:
1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。
2.Device encrypted storage,主要对应的就是Direct Boot使用的存储空间。在Direct Boot模式下和用户解锁手机后都可以使用的存储空间

一般情况下,应用是无法在Direct Boot模式下运行的
如果需要某个app能够在Direct Boot模式下运行,需要注册相关APP的组。
应用组件申请在Direct Boot模式下运行:在AndroidManinfest.xml中设置 android:directBootAware="true"。

android 7.0 在启动Launcher之前会先启动一个FallbackHome,之后才会启动Launcher,通过调查发现FallbackHome属于Settings中的一个activity,Settings的android:directBootAware为true,并且FallbackHome在category中配置了Home属性,而Launcher的android:directBootAware为false,所有只有FallbackHome可以在direct boot模式下启动。
所以在ActivityManagerService启动Home界面时,从PackageManagerService(boolean startHomeActivityLocked)中获取到的Home界面就是FallbackHome 

现在启动Launcher时多了一个流程,导致启动launcher比原来6.0要慢(大约4S)。这4S有时会造成设备黑屏

问题汇总
1)去除FallbackHome的android.intent.category.Home属性会导致停留在开机动画之后的界面。因为此时仍旧处于未解锁状态,且Launcher非directBootAware应用,PMS中的限制导致此时无法启动Launcher;
2)修改FallbackHome和Launcher的优先级仍旧先启动FallbackHome,但是强制包名类名写启动指定launch是否可以还需要验证
3)将Launcher标记为directBootAware应用会导致开机后Launcher crash。因为Launcher中的widget仍旧是非directBootAware的,此时仍旧无法启动,除非将widget相关的APP都标记为directBootAware;
4)PMS依赖手机当前的状态,需要user解锁才能正常查询。如果强制修改,不考虑DirectBoot和当前启动状态,修改后会有无法开机的现象。

另外还有一个未知问题,android7.0预装三方launch时代码编译集成到system/app/会停留到开机动画接口,无法启动launch,但是直接copy到system/app然后在压缩生成system.img 就可以启动launch,app在编译过程中做了哪些限制欢迎大神指导!

猜你喜欢

转载自blog.csdn.net/lancelots/article/details/82149793
今日推荐