Android启动白屏原因及解决方案

Android启动白屏原因及解决方案,第1张

如果大家碰到了这个问题,相信刚开始大家都是很委屈的吧,心里想:我什么都没干啊,就写了个setContentView就要背锅了?如果已经遇到了,不要方,这里给大家提供几个解决方案,我们APP在启动的时候会出现1~2秒的白屏或者黑屏,这个所谓的白屏或黑屏其实与我们设置的Theme有关,如果是Light就是白色,如果是Black则可能出现黑屏,那么为什么会有这种情况出现呢?接下来给大家分析一波。

当你打开一个App时其实就是打开了一个activity,如果这个Activity所属的应用还没有在运行,那么系统会为这个Activity所属的应用创建一个进程,创建进程是需要时间的,从而导致了白屏或黑屏的出现。

解决方案其实很多,接下来给大家介绍几种

打开Manifest文件,找到启动的Activity,找到对应的主题,进入style.xml文件,设置android:windowBackground属性为你启动页的图片即可,如果想体验更好,也可以加入windowNoTitle属性为true隐藏ActionBar,再加入android:windowFullscreen属性为true全屏显示,从而达到秒启动的效果

第一种方案是加入一张图片从而造成一种快速启动的错觉,不过呢,可能会有一种小问题,那就是图片会移动一下,强迫症表示忍受不了,上第二种方案,直接给你的activity设置android:windowBackground属性为透明色,这样就可以避免图片拉伸的问题,小二,上效果。

这样呢有一个小小的缺点,就是启动App的时候,由于界面是透明的,所以可能会导致用户以为自己没有点到App,这两种方式大家根据自己的需求来。

答案:要让闪屏页能够填充屏幕,您需要将您的图片设置为能够填充屏幕的尺寸,并且应该按照设备的分辨率来调整图片的尺寸大小。另外,您还需要确保图片的比例与屏幕的比例一致,这样才能保证图片能够填满屏幕。

app冷启动: 当应用启动时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用, 这个启动方式就叫做冷启动(后台不存在该应用进程)。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

app热启动: 当应用已经被打开, 但是被按下返回键、Home键等按键时回到桌面或者是其他程序的时候,再重新打开该app时, 这个方式叫做热启动(后台已经存在该应用进程)。热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application

当点击app的启动图标时,安卓系统会从Zygote进程中fork创建出一个新的进程分配给该应用,之后会依次创建和初始化Application类、创建MainActivity类、加载主题样式Theme中的windowBackground等属性设置给MainActivity以及配置Activity层级上的一些属性、再inflate布局、当onCreate/onStart/onResume方法都走完了后最后才进行contentView的measure/layout/draw显示在界面上

Application构造方法 –>attachBaseContext()–>onCreate –>Activity构造方法 –>onCreate() –>配置主体中的背景等 *** 作 –>onStart() –>onResume() –>测量、布局、绘制显示

冷启动的优化主要是视觉上的优化,解决白屏问题,提高用户体验,所以通过上面冷启动的过程。能做的优化如下:

为什么冷启动会有白屏黑屏问题?原因在于加载主题样式Theme中的windowBackground等属性设置给MainActivity发生在inflate布局当onCreate/onStart/onResume方法之前,而windowBackground背景被设置成了白色或者黑色,所以我们进入app的第一个界面的时候会造成先白屏或黑屏一下再进入界面。解决思路如下

1.给他设置 windowBackground 背景跟启动页的背景相同,如果你的启动页是张图片那么可以直接给 windowBackground 这个属性设置该图片那么就不会有一闪的效果了

2.采用世面的处理方法,设置背景是透明的,给人一种延迟启动的感觉。,将背景颜色设置为透明色,这样当用户点击桌面APP图片的时候,并不会"立即"进入APP,而且在桌面上停留一会,其实这时候APP已经是启动的了,只是我们心机的把Theme里的windowBackground 的颜色设置成透明的,强行把锅甩给了手机应用厂商(手机反应太慢了啦)

3.以上两种方法是在视觉上显得更快,但其实只是一种表象,让应用启动的更快,有一种思路,将 Application 中的不必要的初始化动作实现懒加载,比如,在SpashActivity 显示后再发送消息到 Application,去初始化,这样可以将初始化的动作放在后边,缩短应用启动到用户看到界面的时间


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7880257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存