Android应用启动白屏问题解决办法

目录

  • Android应用启动白屏问题解决办法
    • 白屏问题的由来
    • 解决方案
    • 文末有言

Android应用启动白屏问题解决办法

白屏问题是应用启动过程中普遍存在的问题。
本文将介绍白屏问题的由来以及一种作者认为是市场上比较普遍的解决办法。

白屏问题的由来

我们已知当系统启动并启动App时需要消耗一定的时间,就算只有1s,也会让用户感觉有“延迟”现象。

我们在项目的MyApplication中模拟一个1s的耗时

class MyApplication : Application() {override fun onCreate() {super.onCreate()Thread.sleep(1000)}
}

来看效果
在这里插入图片描述

这是Google设计者为了让用户体会到点击图标后立马就有响应,而让App创建的过程中先展示一个空白窗口。

正是这个设计,我们在点击App应用图标之后,会看到一段时间的空白屏幕,这就是所谓的安卓应用启动白屏。

总结就是:

谷歌设计App启动的时候有一个预览的界面,在应用完成启动初始化之前都会显示这个预览界面,目的是为了让用户点击APP图标的时候有一个瞬间响应的交互体验。

而这个预览界面是由我们app应用主题android:theme中的android:windowBackground属性决定的,当我们不指定的时候android:windowBackground的时候默认是一个近乎白色的颜色#fffafafa

来做一个代码跟踪

android:theme="@style/Theme.WhiteScreen"查看应用主题----><style name="Theme.WhiteScreen" parent="Theme.MaterialComponents.DayNight.DarkActionBar">...
</style>查看父主题----><style name="Theme.MaterialComponents.DayNight.DarkActionBar" parent="Theme.MaterialComponents.Light.DarkActionBar"/>一直跟踪到----><style name="Platform.AppCompat.Light" parent="android:Theme.Holo.Light">...<item name="android:windowBackground">@color/background_material_light</item>
</style>----><color name="background_material_light">@color/material_grey_50</color>----><color name="material_grey_50">#fffafafa</color>

我们看到android:windowBackground属性最终在Platform.AppCompat.Light主题中指定,而background_material_light对应的颜色正是#fffafafa

所以默认情况下,我们点击应用图标,在应用完成启动初始化之前,看到的都是一个白色空白的屏幕。应用的启动时间越长,这个白屏的显示时间也就越长。

我们在MyApplication中做一个耗时操作模拟应用启动初始化

class MyApplication : Application() {override fun onCreate() {super.onCreate()Thread.sleep(3000)}
}

再来看效果,可以发现这时候白屏问题的解决就刻不容缓了。
在这里插入图片描述

解决方案

windowDisablePreview和windowIsTranslucent标签

谷歌虽然在主题中有提供如windowDisablePreviewwindowIsTranslucent等标签,用来供用户设置不显示预览窗口 或 者将预览窗口设置为透明 这样两种功能,从视觉上让用户无法看出黑白屏,但实际上这两个标签更像是为了提供给开发者有这个选择权利而提供的标签,并不建议使用。

<!-- Base application theme. --><style name="Theme.WhiteScreen" parent="Theme.MaterialComponents.DayNight.DarkActionBar">...<!--设置系统的取消预览(空白窗口)为true --><item name="android:windowDisablePreview">true</item><!--设置背景为透明--><item name="android:windowIsTranslucent">true</item></style>

我们维持3s的延迟,然后将主题中的windowDisablePreviewwindowIsTranslucent设置为true后查看效果
在这里插入图片描述

我们看到点击应用图标后,App会卡顿在那里,等待App启动加载完成后再显示第一个活动窗口。

这显然是和Google官方的设计理念背道而驰的。

正确的解决方法一定是顺着Google设计思想走,也就是让用户点击应用图标的时候有一个及时的响应交互。

改变android:windowBackground属性,替换默认空白预览页面。

当我们替换android:windowBackground属性的值为我们应用自定义的页面。用户点击图标在等待应用初始化加载的过程中,看到的不再是一个空白页,而是一个与本应用相关的图片,这样就完美解决了应用创建过程中看到白屏的问题。其实这也正是市面上很普遍的解决方式。

在与Splash页面做衔接的时候我们有两种选择
1、预览页与Splash页面相同,Splash页面显示完成后直接跳到主页面。
2、预览页与Splash页面不同,先展示预览页,再展示Splash页面,最后再跳到主页面。

第一种,只要做到预览页和Splash页面显示效果完全相同,注意好适配即可,这里就不做详细描述了,感兴趣的朋友可以直接下载Demo查看,我们直接来看效果。
在这里插入图片描述
Splash的标题栏也懒得去了,大家明白意思就行。

我们主要看一下比较常见的第二种选择,因为在实际的业务需求中,我们可能会在Splash页面做一下页面定制,如插播广告等。这个时候就要求预览页与我们的闪屏页不同,如何做呢,也很简单。

1、自定义继承自AppTheme的主题

<!-1:自定义主题--><style name="LauncherTheme" parent="Theme.WhiteScreen"><item name="android:windowBackground">@drawable/layout_launcher</item></style>

2、将启动Activity的theme设置为自定义的主题

<activityandroid:name=".SplashActivity"android:theme="@style/LauncherTheme"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity>

3、在启动Activity的onCreate方法中,在super.onCreatesetContentView方法之前调用setTheme方法,将主题设置为最初的AppTheme

class SplashActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {// 注意这里将主题设置回应用的原有主题setTheme(R.style.Theme_WhiteScreen)super.onCreate(savedInstanceState)setContentView(R.layout.activity_splash)thread {Thread.sleep(1000)runOnUiThread(Runnable {startActivity(Intent(this, MainActivity::class.java))})}}override fun onPause() {super.onPause()finish()}
}

查看效果
在这里插入图片描述
这个效果图在Spash页会看到残影,这是录屏工具导致的,项目实际运行效果是看不到这个残影的。

值得一提的是,最后这两个效果,我们在MyApplication和SplashActivity中都是设置了延时的,现在你还能感觉到一丝丝的启动白屏吗?

文末有言

本篇文章的正文内容到这里就结束了。要知道的是我们做的仅仅是从视觉方面消除了白屏问题,并没有实际缩短应用的启动时间,想做出一个优秀的App,启动优化必须从有效缩短应用启动时间入手。

我们可以点开淘宝App看一下,粗略估计启动时间1s多。如果你觉得自己开发的应用没有淘宝那么复杂,启动时间达到了3s甚至4s,那就是时候考虑真正地在启动优化方面下点功夫了。

异步初始化,懒加载等都是我们值得借鉴和深入学习的技术。


文中Demo下载地址。

本系列文章引导页点击这里

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14181.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 启动白屏解决方案

方案一&#xff1a; 方案二&#xff1a; 方案二变种&#xff1a; 1.先让APP的启动背景变成另一张不是白色的图片 2.再在activity启动的时候把那张设置的非白色的图片设置为白色 方案三&#xff1a; 配置splash_preview.xml splash_preview.xml的显示效果 显示splash下…

QWebEngineView显示网页白屏

由于做项目时要用到Qt来调用百度的地图服务&#xff0c;但测试的时候一直白屏。 解决办法&#xff1a;经测试&#xff0c;仅在Qt 5.15.2 Release下正常运行&#xff0c;而在 Debug 模式下会报错&#xff0c;但强制运行仍有用。 套件选择&#xff1a; 成功&#xff1a; Debug…

微信登录,分享,支付,等的白屏闪屏等问题

首先以微信的第三方登录为例&#xff1a; 微信登录官方文档地址&#xff1a;点击进入 一、准备工作 在进行微信登录之前&#xff0c;首先要在微信开放平台注册开发者账号&#xff0c;并拥有一个已审核通过的移动应用&#xff0c;并获得相应的AppID和AppSecret&#xff0c;申请…

Android 调用微信登陆、支付、分享,出现的白屏、黑屏、闪屏问题。

当我在去调用微信的登录界面&#xff0c;或者其他支付界面&#xff0c; WXEntryActivity又一个界面&#xff0c;这样看起来很不协调 &#xff08;WXEntryActivity类finish的时候会有闪屏的效果&#xff09;。 为了让用户感觉只是拉起了一个授权界面&#xff0c;需要加上 and…

点击任务栏,没反应,并可能出现白屏的情况

1、右键点击任务栏 如果右键也点不动的话&#xff0c;可以重启一下&#xff0c;直到右键能点击成功。 2、点击咨询和兴趣 点击关闭 4、

如何应用chatgpt优雅的作诗

如上图所示&#xff0c;输入给chatgpt&#xff0c;让他帮忙作诗一首&#xff1a; 经过很多次暗示&#xff0c;chatgpt做出来的诗基本上就如图所示了&#xff0c;后面再去测试就是浪费时间了。 如下&#xff0c;自己修改后的诗词为&#xff1a; 静秋念 孤椅余温枫叶伴&#xff0…

波士顿房价数据集.csv

在自己学习python数据分析的时候碰到的第一个例子就用到了‘Boston房价数据集’&#xff0c;自己花费好久才找到。CSDN网站下载需要会员&#xff0c;可这个数据集本来就是共享的&#xff0c;我便把我的结果以简易的方式共享出来&#xff0c;希望能帮助大家&#xff0c;如果有帮…

波士顿房价数据集可视化

波士顿房价数据集 卡内基梅隆大学&#xff0c;StatLib库&#xff0c;1978年涵盖了麻省波士顿的506个不同郊区的房屋数据404条训练数据集&#xff0c;102条测试数据集每条数据14个字段&#xff0c;包含13个属性&#xff0c;和1个房价的平均值 目标 将所有属性与房价之间的关系…

房价预测Python

房价预测包括以下几个部分&#xff1a;导入数据、数据的预处理、求梯度 题目要求&#xff1a; 1.影响房价的因素&#xff1a;面积、房间数 2.利用梯度下降法&#xff0c;求出预测函数tx1*w1x2*w2b 这个是我写的代码&#xff0c;我对于这个题的理解不是很深&#xff0c;代码…

Python房价分析和可视化<房天下二手房>

Python房价分析和可视化&#xff1c;房天下二手房&#xff1e; 本文是Python数据分析实战的房价分析系列&#xff0c;本文分析二线城市贵阳的二手房。 数据获取 本文的数据来源于2022年8月房天下的二手房数据。对数据获取不感兴趣可以跳过此部分看分析和可视化。 1.访问目标页…

波士顿房价数据集——预测房价

文章目录 1.数据集及问题简介2.加载数据集并探索数据3.准备输入的数据4.构建网络并编译网络6.从训练集中留出验证集&#xff08;K折验证法&#xff09;&#xff0c;初步训练模型7.根据训练数据&#xff0c;重新训练模型并测试8.画出训练数据9.调参完成后&#xff0c;在所有训练…

Boston波士顿房价数据下载

下载地址&#xff1a;https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data 打开方式&#xff1a; 直接用excel可以打开&#xff0c;转存为csv等 模型训练 from sklearn.linear_model import Lasso from sklearn.preprocessing import Standard…

利用波士顿房价数据集实现房价预测

文章目录 一、 观察波士顿房价数据并加载数据集1、加载数据集 二、 特征选择三、 模型选择四、 模型训练和测试1、 训练模型2、打印线性方程参数3、模型预测4、 计算mae、mse5、 画出学习曲线 五、 模型性能评估和优化1、 模型优化&#xff0c;考虑用二项式和三项式优化2、 划分…

预测房价(Python)

构建神经网络/深度学习模型的基本步骤 深度学习模型具有一定的通用性&#xff0c;使得深度学习的门槛降低&#xff0c;这是深度学习得以重新占据计算机领域一席之地的重要原因&#xff0c;深度学习均可以从下述五个步骤来完成模型的构建和训练。 def load_data():# 从文件导入…

香港的房价真的那么贵吗?用数据挖掘真相!

作者 | 挖数 来源 | 挖数&#xff08;公众号id&#xff1a;washu66&#xff09; 香港位于广东深圳的南边&#xff0c;面积是1106平方公里&#xff0c;比中国的四大一线城市都小。 不仅面积小&#xff0c;其人口密度也大&#xff0c;香港每平方公里的人口数比四大一线城市都多。…

波士顿房价数据集

数据集 Keras中常见的集成数据集波士顿房价数据集1. 加载数据集2. 访问数据集3. 数据可视化 Keras是一个高层的神经网络和深度学习库&#xff0c;可以快速搭建神经网络&#xff0c;易于调试和从扩展&#xff0c;是TensorFlow的官方API&#xff0c;内置了常用的公共数据集&#…

ChatGTP全景图 | 背景+技术篇

引言&#xff1a;人类以为的丰功伟绩&#xff0c;不过是开端的开端……我们在未来100年取得的技术进步&#xff0c;将远超我们从控制火种到发明车轮以来所取得的一切成就。——By Sam Altman 说明&#xff1a;ChatGPT发布后&#xff0c;我第一时间体验了它的对话、翻译、编程、…

考研成功上岸提前学Python,轻松拿到大厂实习offer!

23考研即将尘埃落定&#xff0c;首先要恭喜上岸的同学呀~ 关于上岸后到底要不要学Python、读研怎么找实习等相关问题&#xff0c;其实之前也聊过&#xff0c;但是大家可能还没有意识到Python给读研带来什么样的正面影响&#xff0c;蛋糕给大家看看往期Python学员的反馈&#x…

在当下互联网行情下,2023年程序员的工作真的很难找

前言 年后&#xff0c;听到有几位同事有离职的想法&#xff0c;有的已经在开始找工作了。&#xff0c;这个行业的工资就是靠跳槽来加速增长的&#xff0c;不过经过了这几个月的面试、复试的经历&#xff0c;几位前期提出离职的同事渐渐改变了想法&#xff0c;他们发现放开后的…

重磅!大湾区大学,官宣招生!

来源&#xff1a;大湾区大学 编辑整理 &#xff1a;双一流高教 3月23日&#xff0c;大湾区大学&#xff08;筹&#xff09;发布招生信息&#xff0c;该校将和南方科技大学联合招收30名硕士研究生。通知显示&#xff0c;这批学生的学籍属于南科大&#xff0c;第一年在南科大培养…