App启动流程
1、系统
开机–>[引导程序BootLoader->负责拉起操作系统]–>linux,init.rc–>init进程pid=1–>zygote[孵化器,创建虚拟机JVM]–>启动进程间通讯的工具SystemServer[打开binder线程池,SystemServiceManeger]–>开启各种服务ActivitymanegerService,CameraService,WindowManegaer–>启动Launch
- 打开电源,引导芯片加载BootLoader
- BootLoader拉起操作系统
- Linux找到init.rc开始初始化进程,init进程pid=1
- zygote[孵化器]创建虚拟机,启动SystemServer
- 启动Binder线程池,开启SystemServiceManager,开启各种服务ActivitymanegerService,CameraService,WindowManegaer
- 开启各种服务ActivitymanegerService启动Luncher
applicqation开启
startActivity把信息告诉系统,然后系统打开孵化器,孵化器把信息传入创建ActivityThread main(),再然后传入Application main();onCreate();–>Activity onCreate();
我们所能改动的是Application main()–>Activity onCreate();这中间的过程
白屏、黑屏
原因
黑白屏生成原因–>App打开过程中Application到Activity之间有一段加载的空白时间。而这段时间之内如果设置了windowsBackground颜色白色的,就为白屏,没设置的则为黑屏
<!--白屏-->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
//这一段是导致白屏的代码,点击他的parent链接到他的上一层,一直点
<style name="Platform.AppCompat.Light" parent="android:Theme.Holo.Light">
...
<item name="android:windowBackground">@color/background_material_light</item>
...
</style>
//通过这段代码可以看到默认窗口背景颜色是白色,所以呈现为白屏
<!--黑屏-->
<style name="AppTheme" parent="android:Theme">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="Theme">
...
<item name="windowBackground">@drawable/screen_background_selector_dark</item>
...
</style>
//溯源代码可以看到窗口背景颜色为黑色,所以呈现为黑屏
解决
-
三种
开启显示背景颜色
<!--窗口背景颜色,此处不允许直接赋值如 #FFFFFF,必须在color中定义使用--> <item name="android:windowBackground">@color/colorAccent</item>
设置透明,所以没有白屏或黑屏
<!--设置背景透明--> <item name="android:windowIsTranslucent">true</item>
禁用窗口的预览动画
<item name="android:windowDisablePreview">true</item>
Logcat 输入Display筛选系统日志[fliter选择no fliter]
- 性能分析adb命令
查看页面启动时间
adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity