Android(安卓)解析启动白屏原理及解决方案
对于启动页白屏或黑屏的问题,大家或多或少都遇到过,也解决过。但是真正了解它是什么原因造成的,了解的人可能不多。下面主要对造成启动白屏/黑屏的原因进行分析。
一 、出现的原因
在你手机开机到你打开你的app,中间其实经过了好多步骤。在这里我简单的描述一下,具体的步骤下来自行查阅资料。
android 开机时首先会创建一个init的进程,它是由多个配置文件组成的,进程号为1。然后会启动一个zegote进程,然后启动systemService 最后启动launcher进程,创建桌面。
(正文)当我们启动一个应用进程时,相对应的SystemService会去检查是否已经存在这样一个进程,如果存在就相当于从后台把这个沉睡的进程给拉起来了,由于事先已经创建过,保存了相对应的属性及对应的服务,这个过程叫做热启动,此时就不会出现启动白屏/黑屏的现象。相对应的当我们 点击app图标时,Systemservice检查之前没有创建过,就叫冷启动,此时,系统和app本身有很多工作要做。首先系统服务会先检查startActivity中的intent的信息,然后去创建进程,最后才是启动|Activity。上面我们提到的白屏/黑屏的现象就是在启动Activity前,系统服务检查及创建进程的过程中出现的。一般情况下,根据手机内存及处理速度相关,持续时间不确定。
系统在绘制页面加载布局之前,首先会初始化窗口(window),而在进行这一步的操作时,系统会根据我们设置的Theme来制定他的Theme的主题颜色,Window布局的顶层是DecorView,StartingWindow显示一个空的DecorView,我们在Style中的设置就决定了显示的是白屏还是黑屏。
二、解决的方法:
既然是根据Theme显示的黑屏还是白屏,我们就可以在Theme入手。在清单文件中给启动页配置Theme
1、在AndroidManifest文件中设置:
2、在style文件中定义:
完成以上两步就解决了启动白屏/黑屏的问题。
更多相关文章
- android app卸载以后弹出用户反馈界面
- [Android]你不知道的Android进程化(1)--进程信息
- Android开发之android中的多进程模式
- android 前后台保活 实现定位数据定时上传并展示轨迹 (上)
- Android实现换肤功能(一)
- android跨进程事件注入(程序模拟用户输入)
- android IBinder通信驱动(摘自《android深入浅出多媒体编程》)
- Android几种Service常驻内存的小思路
- Android(安卓)Native进程间通信实例—Socket本地通信服务端进程