在应用端规避掉打开APP
闪白屏、黑屏问题,主要是从android:windowIsTranslucent
上让白屏变透明,进而不让用户看到白屏、黑屏现象。
但是,此解决方案会导致在Launcher
中点击APP`` icon
是会有轻微的卡顿现象,此现象会让用户误认为手机卡,APP
启动慢,从而将打开APP
闪白屏的黑锅甩给手机制造厂商。
1. 透明样式Theme 解决方案如下:
1. 自定义透明样式
在res/values/style.xml
中自定义样式
自定义透明样式
2. App 启动入口Activity 中使用自定义样式
App 启动入口Activity 中使用自定义样式
注意: windowDisablePreview =false
属性可以不让白屏显示,失去中间白屏过度,会给用户带来不是太好的体验,比如点击后需要稍微等一下才会打开APP
,会让用户错误的怀疑自己是否成功点击过icon。Google 很不推荐此种做法。
2. 使用app logo等图片样式使用方法如下
1. 自定义Theme
自定义Theme
2. 为 要启动的Activity设置自定义样式
为 要启动的Activity设置自定义样式
3. 同样也可以在Java类中的 设置样式
Java类中的 设置样式
此方法也是Google
推荐的方法,建议大家可以用自定义Theme
替换掉系统中的白屏,当然也可以搞成什么广告页面等等。
四、 Framework 层解决冷启动白屏、黑屏方案
==========================
打开APP
闪黑屏、白屏的根本原因在于PhonewindowManger
中的addStartingWindow
方法。
addStartingWindow方法
自定义填充Window 背景
Framwork
上 这样修改后,会将白色屏幕替换成我们客制化的颜色,此修改会影响到所有APP
的启动。
五、App 启动优化原理
============
L
版本之后,手机上所有APP
都要经过dex2oat
处理之后,才能运行.
dex2oat
是将原来的dex文件预先的翻译处理,从而加快APP
运行的时间,但由于某些APP
比较复杂,优化的时间可能会比较长,进而给用户感觉运行卡顿。
dex2oat
优化是以dex
文件中的method
为单位,dex2oat
会根据需要优化一定量的method,也就是说并不是优化的method
都会被翻译成oat
模式。
根据优化的method
的量的多少,可以分为如下的几种模式:
Android 虚拟机优化模式
六、 App 启动优化简介
=============
Android L
之后的版本,如无特殊处理,APP
启动模式为Speed
模式,此模式性能较好,但优化之后的文件占用空间比较大。不同模式可以看上面MTK 提供的参考标准。
对APP
的优化是通过dex2oat
去执行的,优化模式的参数是有外界调用dex2oat
方法传递的参数控制,如无传递参数,默认参数Speed
。
那么调用dex2oat
的路径有哪些呢?
1.安装APP时优化
通过 Framework 下的PackageManagerService
将参数传递给 mAppInstallDir
,然后mAppInstallDir
调用dex2oat
,因此此种方式的优化模式通过PMS控制。
此种模式是将APP
的路径,优化之后的oat
存放路径,传递给dex2oat
。
但是由于内容可能发生改变,我们有可能无法在dex2oat
对APP
加以识别,所以,这时候,可以在installd
或者PMS
中加以判断,是否是我们认为安装比较慢的APP
,如果是的话,则改变其优化模式。
2. APP自身优化插件时
此种模式往往会指定模式为speed
模式或者不指定,在优化之后的保存路径中,携带APP
的包名。
intall.jpg
目前有些 apk
像Facebook
、微信WeChat
等 APP
,应用本身较大且代码复杂度高,可能会出现安装失败,安装慢等问题。
安装失败是由于dex2oat
进程编译时间过久打到了timeout
。
安装慢当然就是dex2oat
做的compiler
久的原因。
另外,像 微信 WeChat
这种apk
在启动应用的时候是会优化插件的(而不是在安装的时候优化)
,这样就会导致应用lunch
时间过久,给用户的感觉就是很晚才入,手机卡顿等锅,让手机厂商背负。在需更改优化的模式,加快安装的时间时,请注意此修改会降低 APP
运行的性能。
注意:APP
安装 / lunch时间的长短取决于CPU核心数,8 核CPU 肯定比 4 核 CPU优化要快,除此之外,还取决于EMMC的性能 ,memory等系统因素。
七、App 启动优化方案
============
对于APP
优化目前有3个地方可以进行处理。
1. PackageManagerService中
这个地方是安装APP
必经之路,代码存放地址如下:
PackageManagerService 代码路径
2. installd的commands.cpp中
这也是安装APP
的必经之路 ,代码存放地址如下:
commands.cpp代码存放路径
3. dex2oat 中
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
最后
下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术
高级UI,自定义View
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算