目录介绍
- 01.存在白屏问题
- 02.解决白屏的办法
- 2.1 解决方案分析
- 2.2 第一种解决方案
- 2.3 第二种解决方案
- 2.4 注意要点
- 03.Application启动速度优化
- 04.启动页面屏蔽返回按键
好消息
- 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计50篇[近30万字],转载请注明出处,谢谢!
- 链接地址:https://github.com/yangchong211/YCBlogs
- 如果觉得好,可以star一下,谢谢!当然也欢迎提出建议,万事起于忽微,量变引起质变!
- 轮播图封装库:https://github.com/yangchong211/YCBanner
- 轻量级版本更新弹窗:https://github.com/yangchong211/YCUpdateApp
- 通知栏封装库:https://github.com/yangchong211/YCNotification
01.存在白屏问题
1.1 问题描述
- 出现问题描述
- android app启动页面黑屏的问题,android开发app启动时若没有做特殊处理的话,会出现一瞬间的白屏现象。
- 即使你启动页界面就加载一个布局,不做其他耗时处理,貌似也会出现一瞬间的白屏问题。注意,有些地方也称黑屏,主要是看你给app设置的style样式。
- 当从桌面 Launcher 的小图标点击冷启动一个 App 的时候,程序需要进行一些基本的初始化操作,例如在Application 或者SplashActivity中做了很多耗时操作,例如初始化第三方SDK等,当手机性能不好,配置不高时,该现象尤其明显。
1.2 问题分析
- 为什么存在这个问题
- 当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态,于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。而这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口。
- 实际上就是是activity默认的主题中的android:windowBackground为白色或者黑色导致的。
- 总结来说启动顺序就是:app启动——Preview Window(也称为预览窗口)——启动页
02.解决白屏的办法
2.1 解决方案分析
- Android在选择展示黑屏或者白屏的时候,是根据你设定的主题而不同的,也就是说,虽然你的代码没有被执行,你的配置文件却被提前读取了,用来作为展示Preview Window界面的依据。所以,解决方案的切入口就是整个APP的manifest文件,更确切的说应该是主题配置文件。
- 设置配置文件style样式中的windowBackground这个属性来显示一张背景图还有一个效果就是启动应用程序会感觉非常快,而且与加载MainActivity的contentView是异步的。
2.2 第一种解决方案
2.3 第二种解决方案
2.4 注意要点
- 不管是那种方式,都可以解决问题。注意的是有些手机标题栏和状态栏也会影响这两图层的,造成抖动效果,为了避免这种情况需要处理状态栏问题。这里可以直接引用我封装的状态栏库,有兴趣可以了解下,直接拿来用:https://github.com/yangchong211/YCStatusBar
03.Application启动速度优化
- 提高app的启动速度,加快Application的执行时间也是一个很重要的方面,这里我暂时总结了几条原则:
- 尽量不将一些业务逻辑放于Application中;
- Application尽量不以静态变量的方式保存应用数据;
- 若App的大小不是特别大无需使用dex分包方案;
- 在Application中关于文件,数据库等耗时的操作尽量放到IntentService线程中处理
- 不要做有关于循环的操作
04.启动页面屏蔽返回按键
- 一般App中都会在启动页面执行一些初始化配置等,所以这时候启动页加载时不希望用户通过按下返回按键退出App,因而可以在启动页中屏蔽返回按键,这里简单的介绍一下具体的实现:
/**
* Activity屏蔽物理返回按钮
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
关于其他内容介绍
01.关于博客汇总链接
- 1.技术博客汇总
- 2.开源项目汇总
- 3.生活博客汇总
- 4.喜马拉雅音频汇总
- 5.其他汇总
02.关于我的博客
- 我的个人站点:×××w.yczbj.org,×××w.ycbjie.cn
- github:https://github.com/yangchong211
- 知乎:https://×××w.zhihu.com/people/yczbj/activities
- 简书:http://×××w.jianshu.com/u/b7b2c6ed9284
- csdn:http://my.csdn.net/m0_37700275
- 喜马拉雅听书:http://×××w.ximalaya.com/zhubo/71989305/
- 开源中国:https://my.oschina.net/zbj1618/blog
- 泡在网上的日子:http://×××w.jcodecraeer.com/member/content_list.php?channelid=1
- 邮箱:yangchong211@163.com
- 阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100- 239.headeruserinfo.3.dT4bcV
- segmentfault头条:https://segmentfault.com/u/xiangjianyu/articles
- 掘金:https://juejin.im/user/5939433efe88c2006afa0c6e
|