对于启动页白屏或黑屏的问题,大家或多或少都遇到过,也解决过。但是真正了解它是什么原因造成的,了解的人可能不多。下面主要对造成启动白屏/黑屏的原因进行分析。

一 、出现的原因

在你手机开机到你打开你的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文件中定义:
 

    

完成以上两步就解决了启动白屏/黑屏的问题。

更多相关文章

  1. android app卸载以后弹出用户反馈界面
  2. [Android]你不知道的Android进程化(1)--进程信息
  3. Android开发之android中的多进程模式
  4. android 前后台保活 实现定位数据定时上传并展示轨迹 (上)
  5. Android实现换肤功能(一)
  6. android跨进程事件注入(程序模拟用户输入)
  7. android IBinder通信驱动(摘自《android深入浅出多媒体编程》)
  8. Android几种Service常驻内存的小思路
  9. Android(安卓)Native进程间通信实例—Socket本地通信服务端进程

随机推荐

  1. R的数据库访问-MySQL
  2. 不能安装mysql-connector-odbc-5.2.6-win
  3. 如何通过mysql查询获得具有不同时区的事
  4. JDBC与SQLServer的连接
  5. org.json Android系统错误。JSONExceptio
  6. 求助关于MYSQL导出多个库问题。
  7. 深入理解Mysql索引底层数据结构与算法
  8. MySQL“在”查询中非常慢,但是带有显式的
  9. Amoeba实现Mysql主从复制读写分离
  10. 数据库优化_定位慢查询