进大厂面试填什么表,App 启动时间优化详解,为什么Flutter能最好地改变移动开发

在应用端规避掉打开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

但是由于内容可能发生改变,我们有可能无法在dex2oatAPP加以识别,所以,这时候,可以在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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术

高级UI,自定义View

UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。

不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

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、安卓逆向、云计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值