Android APP启动黑、白屏问题

前言

相信做安卓的小伙伴一定有发现当我们在启动应用时屏幕会出现一瞬间的黑屏或者白屏显现,然后再进入应用的主页。那么这是为什么呢?

 

分析

我们安卓有两种启动方式:冷启动和热启动

冷启动:后台没有该应用进程,重新创建进程(实例化Application->实例化Activity入口->最后显示Activity)

热启动:后台存有当前进程,直接从进程启动,无需重新创建Application (实例化Activity入口->最后显示Activity)

当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,这就很尴尬了,因为用户会以为没有点到APP而再次点击,这极大的降低用户体验,Android需要及时做出反馈去避免这段迷之尴尬。于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。而这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口。
 
解决
 
方案一:设置主题背景图
 
1.style 文件
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@mipmap/splash_bg</item>
</style>
2.manifest 文件配置
<application
。。。。
android:theme="@style/SplashTheme">
</application>

此时,系统启动时就会加载设置好的 splash_bg 背景图。

缺点:因为系统的默认加载过快,会出现闪一下背景图然后进入主页的情况。

方案二:自定义启动页
1.style 文件

<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@mipmap/splash_bg</item>
</style>

2.创建 SplashActivity 页面 注意:此处有两种方案
                      1.无需设置xml,只在onCreate下做延时跳转页面即可
                      2.设置windowBackground为透明色,SplashActivity页面加载自定义xml文件布局
onCreate() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
goActivity(MainActivity.class);
finish();
}
}, 2000);
}
3.manifest 文件配置
<activity
android:name=".activity.SplashActivity"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>



posted @ 2021-08-18 14:56  小德505  阅读(671)  评论(0)    收藏  举报