android:windowSoftInputMode引发的思考

一直以来心中有个疑问android:windowSoftInputMode是保存在哪里,在打开activity就默认设置好了。或者说设置了android:windowSoftInputMode,他是如何起作用的。
首先要从源码角度分析如何解析AnidroidManifest,
首先Zygote进程孵化出SystemService线程,然后调动他的main方法,在main中就会依次调用系统服务的main,其中就有PackageManagerService,就是调用PackageManagerService的main,在main中实例化自己,并且注册到SystemService。
在构造方法中就会扫描/system/framework, /system/app, /vendor/app,/data/app,/data/app-private中的apk文件,然后就是解析package中的manifest文件.以上是老罗源码分析的安装篇总结。

然后就是我的学习。
QQ图片20180315170918.png

当遇到application标签的时候,解析parseApplication,进入这个方法后,我们可以看到系统把application标签下的属性保存在ApplicationInfo中,接着下走
QQ图片20180315171304.png

然后进入解析activity方法中。
QQ图片20180315171520.png

这样就找到我们的android:windowSoftInputMode属性是保存在activity的ActivityInfo中
这里要十分注意这里的activity不是我们用的四大组件的activity。
QQ图片20180315172251.png

现在其实就很明朗了,问题就变成了,系统是如何把保存在我们组件activity中的activityInfor设置给我们每次startActivity中的activity这个上下文。

Launcher是桌面应用程序默认的activity,在系统启动的时候被启动了,具体就是SystemService在调用ActivityManagerService的main方法的时候。ActivityManagerService负责启动Launcher,启动的时候必然会用intent,连Launcher都是用intent启动,可见intent强大,而intent中也是有ActivityInfo这个对象的。
QQ图片20180315182415.png

intent就会去packagemangerService拿到ActivityInfo,有了这个,ActivityManagerService就可以去ActivityStack启动activity了

你可能感兴趣的:(android:windowSoftInputMode引发的思考)