关于APP冷启动时最开始的白屏以及处理方式

关于APP冷启动时最开始的白屏以及处理方式

一.冷启动与热启动

通常情况下app的启动方式包括冷启动和热启动,当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动,如果后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台),这种启动会从已有的进程中来启动应用,这个方式叫热启动。而二者不同的地方就在于冷启动是重头开始创建应用进程,热启动更像是唤醒应用进程,所以冷启动会从Application到MainActivity逐一创建,而热启动则没有创建Application这一步,我们会看到白屏的情况一般都是在冷启动的状态下发生的。我们冷启动app时首先展示的就是空白的启动窗口,因为此时application没有完成创建,这就是为什么会出现一段时间的白屏。

二.处理方式

如果想要避免白屏,首先就不要在application的onCreate方法中进程大量的耗时操作,并且还要在AndroidManifest配置文件中指定一个自带背景图片的初始主题,这个图片就可以取代白屏,一般我们会用这张背景图片来对我们的app进行说明或者是欢迎用户登录等等,是一种增加用户交互体验的方式。

自定义主题首先要写一个设置背景的start_background.xml文件:


    
        
    
        
    

在主题配置文件styles.xml中自定义主题:

//APP启动优化,去除白屏

最后在AndroidManifest文件中设置这个初始主题:



    ...

这样在冷启动app时就不会再出现白屏的情况,但是这个主题只能在最开始的时候使用一次,application将界面交给MainActivity之后就不能再使用这个主题,否则MainActivity就会把代替白屏的图片作为默认背景,之后的所有activity都是如此。更换主题就需要在activity的onCreate方法中调用setTheme(R.style.AppTheme)方法,这个方法要在super.onCreate之前调用。但是,仅仅只在一个activity中重新设置主题只对当前活动有效,那我们每创建一个活动难道都要设置一次主题吗?我们可以写一个activity的基类并复写onCreate方法,在方法中重新设置主题,让所有的activity都继承自这个基类就可以了,就不需要在每一个activity中都要写一遍setTheme方法。

 

你可能感兴趣的:(android)