可以重复避免对象初始化,布局解析绘制。 场景就类似你打开微信聊了一会天这时候出去看了下日历 在打开微信 微信这时候启动就属于冷启动。...- 填充加载布局Views - 在屏幕上执行View的绘制过程measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主活动。...;/item> </style> 设置闪屏图片主题 为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片... //所以闪屏页展示的时间为 2000ms - diffTime. } 所以我们就可以动态的设置应用闪屏的显示时间,尽量让每一部手机展示的时间一致,这样就不会让手机配置较低的用户感觉漫长难熬的闪屏页时间...(例如初始化了2000ms,又要展示2000ms的闪屏页时间.)
布局优化 GPU绘制 我们对于UI性能的优化还可以通过开发者选项中的GPU过度绘制工具来进行分析。...用张简洁的图来介绍把。看起来方便~~ ? 线程优化 上面说的三种导致ANR的情况,绝大多数就是因为线程阻塞导致的。那么我们应该如何处理呢?Android系统为我们提供了若干组工具类来解决此问题。...但启动时,系统依然会展示闪屏页,直到第一个 Activity 的内容呈现为止。 热启动 相比暖启动,热启动时应用做的工作更少,启动时间更短。...但是一般项目都会有闪屏页。然后从闪屏跳转到首页。我们可以按照大多数的项目来改善。怎么说的,我们可以看到一般项目都有倒计时显示。也就是说倒计时结束就自动进入首页。或者可以直接跳过进入首页。...我们还可以这样,闪屏页我们把他当作一个fragment嵌套在MainActivity中,那么我们可以在进入闪屏时直接预加载主页的view。倒计时我们把闪屏页remove掉直接显示首页。
涉及到的有以下这些点: 闪屏页 自定义布局 下拉刷新 上拉加载更多 使用Assets 路由(页面跳转) 内嵌WebView 闪屏页 由于启动Flutter app的时候需要初始化Flutter...这个时间是比较长的。所以开发Flutter app的时候都需要加一个闪屏页。给Android平台上跑的Flutter app加闪屏页其实是和给一个正常的Android app加闪屏页是一样的。...那段注释的大概意思是说这个标签是用来表示让Flutter在启动过程中保持闪屏页直到第一帧画面被绘制出来。也就是说,闪屏页的隐藏不需要我们来处理了。 接下来看看这个LaunchTheme: ?...LaunchTheme 可见就定义了一个窗口的背景了,也就是我们的闪屏页本尊了,这里你可以把这个drawable改成你自己的闪屏页图片也OK。 至于ios平台的闪屏页怎么弄,可以参考这里。...自定义布局 我们都知道,在Android中,如果系统提供的布局控件不能满足我们的需求,我们会自定义布局控件来实现。Flutter同样的也提供自定义布局控件的功能。
2.启动主线程(main thread) 3.填充加载布局Views 4.在屏幕上执行View的绘制过程.measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口...,将其替换为主活动。...,直到 App 应用程序的入口 Activity 创建成功,视图绘制完毕 解决方法可查看Android启动界面SplashActivit的实现方法 代码优化 Android中如何计算 App 的启动时间...,这些常见问题包括: 1.复杂繁琐的布局初始化 2.阻塞主线程 UI 绘制的操作,如 I/O 读写或者是网络访问 3.Bitmap 大图片或者 VectorDrawable加载 4.其它占用主线程的操作...//所以闪屏页展示的时间为 2000ms - diffTime. } 所以我们就可以动态的设置应用闪屏的显示时间,尽量让每一部手机展示的时间一致,这样就不会让手机配置较低的用户感觉漫长难熬的闪屏页时间
Android开发者选项,看起来很简单的事情,其实很多同学对它了解得不够,Google用心良苦得为我们设计了这么多小开关都是有它的作用的,今天也花了点时间,过了一遍全部的30多个开关,从中整理出15个对日常...抱歉这里不介绍开发者选项在哪怎么开启之类的问题。 1. Stay awake 充电时保持屏幕唤醒,开发的时候,时不时的锁屏真是够了,开启它后只要插着USB线就不需要总去解锁屏幕啦。 2....Show surface updates 在界面绘制时,闪烁提醒,开启它后简直能闪瞎你的眼睛,但有时候我们需要精确知道具体的界面绘制细节时,不得不需要忍受这种折磨。 7....Simulate secondary displays 它允许你模拟不同屏幕尺寸下应用的表现,IDE里虽然也有类似的功能,可那毕竟只是个静态的效果。 11....Strict mode enabled 严苛模式下,当应用做了一些影响性能的事情,屏幕会闪一下提醒你。
在屏幕上执行View的绘制过程.measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主活动。...> [70] (无白屏,不过从点击到App仍然存在视觉延迟~) 设置闪屏图片主题 为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片...//所以闪屏页展示的时间为 2000ms - diffTime. } 所以就可以动态的设置应用闪屏的显示时间,尽量让每一部手机展示的时间一致,这样就不会让手机配置较低的用户感觉漫长难熬的闪屏页时间...和其它窗口一样,启动窗口也需要通过PhoneWindow来设置布局信息DecorView。所以在上面视觉优化中的设置闪屏图片主题的启动窗口显示的就是图片内容。...UI渲染优化的目的就是减轻CPU,GPU的压力,除去不必要的操作,保证每帧16ms以内处理完所有的CPU与GPU的计算,绘制,渲染等等操作,使UI顺滑,流畅的展示出来。
闪屏页简介 闪屏页,我们手机上的每个 APP 几乎都有自己的闪屏页,就是在真正进入程序前,会有一个页面停顿几秒钟。其实我们完全可以充分利用好这几秒钟做很多的程序初始化了启动。...我们都知道 Window 布局的顶层是 DecorView,而 StaringWindow 显示的是一个空的 DecorView,只是这个 DecorView 会应用我们的这个 Activity 所指定的...我们默认的 Theme 是 @android:style/Theme.Light 的话,这个时候就会产生白屏了。...再顺便说一下 Activity 布局的绘制顺序: 绘制背景 绘制 View 本身的内容 绘制子 View 绘制修饰内容(例如滚动条) 解决黑白屏问题 通过上面我们已经知道为什么会出现这个问题了,那么解决起来就很简单了...splash true 设置的这个背景要和我的启动页搭配起来就行了!
但是这块的优化关注的人很少,因为App常常伴有闪屏页,所以这个问题看起来就不是问题了,但是一款好的应用是绝对不允许这样的,我加闪屏页是我的事,启动速度慢绝对不可以。...1、启动主线程 2、创建主Activity 3、加载布局 4、屏幕布局 5、执行初始绘制 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主活动。...如果应用程序的Activity仍然驻留在内存中,那么应用程序可以避免重复对象初始化、布局加载和渲染。 热启动显示与冷启动方案相同的屏幕行为:系统进程显示空白屏幕,直到应用程序完成呈现活动。...同时因为我们一般会有闪屏页面,也可以把延时启动的地图,推动的启动在这个时间段里,这样合理安排时间片的使用。极大的提高了启动速度。 针对3:避免I/O操作、反序列化、网络操作、布局嵌套等。...可以使用Android Studio将现有的BMP,JPG,PNG或静态GIF图像转换为WebP格式。 6、使用矢量图形 可以使用矢量图形来创建与分辨率无关的图标和其他可伸缩Image。
: 加载并启动应用 显示应用的空白启动窗口 创建应用进程 应用进程负责后续阶段: 创建应用对象(Application) 启动主线程 创建主Activity 扩充视图/加载布局 布局屏幕 执行初始绘制...闪屏优化: 预览闪屏(今日头条),预览窗口实现成闪屏效果,高端机上体验非常好,不过低端机上会拉长总的闪屏时长(建议在Android6.0以上才启用此方案); //优点:避免点击桌面图标无响应 //缺点...:拉长总的闪屏时长 //(可以配合三方库懒加载,异步初始化等方案使用,减少初始化时长) //1....子线程install(不推荐): 闪屏页开一个子线程去执行MultiDex.install,然后加载完才跳转到主页, 需要注意的是闪屏页的Activity,包括闪屏页中引用到的其它类必须在主dex中,...实验室监控 通过定期自动录屏并分析,也适合做竞品的对比测试 如何找到启动结束的点 80%绘制 图像识别 门槛高,适合大厂 线上监控 启动耗时计算的细节: 启动结束的统计时机:使用用户真正可以操作的时间
渲染树布局和绘制:渲染树确定各个dom节点在屏幕中单确切位置,根据渲染树中的颜色等信息绘制出网页。 ?...另一方面,http请求的数量也是有限制的,浏览器对同一个域名有连接数限制,不同浏览器内核、不同版本的请求数不尽相同,大部分的并发请求数是6个。 ?...而CSS放在底部则会引起重新绘制,用户侧感受到“闪屏”的不好体验。 5、JS放在底部 JS在下载的时候会引起两个问题:阻止网页内容的展示并阻止其他资源下载。...最后,经过压缩过的脚本文件使用务器端设置GZIP压缩算来压缩,能够压使文件缩得更加的淋漓尽致。 7、是否添加缓存 ?...内存:加载页面前后内存变化,可间接反映H5中资源数量和大小,如dom数量,图片大小。 CPU:当页面中资源样式复杂,强调视觉效果时,测试员可观察CPU占用率来反映H5绘制质量。
为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片,而不是白屏。...">@drawable/lunch //闪屏页图片 true <...而UI渲染优化的目的就是减轻CPU、GPU的压力,除去不必要的操作,保证每帧16ms以内处理完所有的CPU与GPU的计算、绘制、渲染等等操作,使UI顺滑、流畅的显示出来。...在重叠的UI布局中,如果不可见的UI也在做绘制的操作或者后一个控件将前一个控件遮挡,会导致某些像素区域被绘制了多次,从而增加了CPU、GPU的压力。 那么如何找出布局中Overdraw的地方呢?...比方说Splash闪屏广告图片, 我们可以在连接到Wifi时下载缓存到本地; 新闻类的App可以在充电,Wifi状态下做离线缓存。
商品详情快切,可减少页面跳转感,使商品查找更加高效。 商品对比,一目了然,可避免传统不同页面间跳转对比,使商品对比更精准。 改变以往客服页面独占式的布局,给用户带来更轻量的多任务体验。...如果没有这个参数会发生闪屏。闪一下Activity B再出来Activity C,体验效果不佳。配置上Activity B,系统就会帮助开发者处理这种问题。...分屏模式的配置样例 下面是购物模式与自定义模式在页面跳转上的区别: 需要注意的是:左右分屏的返回是不一样的,注意左图中的蓝色虚线,左屏C的返回会把B和C都销毁,左屏C的返回只是销毁C。...来进行布局,而不是使用application的context。...本篇文章的分享只是基础的内容,更加全面具体的内容,可参考: 1.
应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主活动。...为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片,而不是白屏。...">@drawable/lunch //闪屏页图片 true <...而UI渲染优化的目的就是减轻CPU、GPU的压力,除去不必要的操作,保证每帧16ms以内处理完所有的CPU与GPU的计算、绘制、渲染等等操作,使UI顺滑、流畅的显示出来。...比方说Splash闪屏广告图片, 我们可以在连接到Wifi时下载缓存到本地; 新闻类的App可以在充电,Wifi状态下做离线缓存。
此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间。经过的时间包括以下事件序列: 启动进程。 初始化对象。 创建并初始化 Activity。 扩充布局。 首次绘制。...5.2 Systrace Systrace 结合了 Android 内核数据,分析了线程活动后会给我们生成一个非常精确 HTML 格式的报告。...那么视觉优化的方案 也就有了:替换第一个activity(通常是闪屏页)的Theme,把白色背景换成Logot图,然后再Activity的onCreate中换回来。...、首页的数据预加载:闪屏广告、首页数据 加载后缓存到本地,下次进入时直接读取缓存。...首页读取缓存到内存的操作还可以提前到闪屏页。 6.6 页面绘制优化 闪屏页与主页的绘制优化,这里涉及到绘制优化相关知识了,例如减少布局层级等。
例如,一旦用户点击桌面图标,Android系统会立即显示一个启动窗口,这个窗口会一直保持显示直到画面中的元素成功加载并绘制完第一帧。...App Launch Time & Theme Launch Screens 启动闪屏不仅仅可以作为品牌宣传页,还能够减轻用户对启动耗时的感知,但是如果使用不恰当,将适得其反。...如果程序的启动速度足够快,我们看的闪屏窗口停留显示的时间则会很短,但是当程序启动速度偏慢的时候,这个启动闪屏可以一定程度上减轻用户等待的焦虑感,避免用户过于轻易的关闭应用。...对于启动闪屏,正确的使用方法是自定义一张图片,把这张图片通过设置主题的方式显示为启动闪屏,代码执行到主页面的onCreate的时候设置为程序正常的主题。 5....作者简介: 胡凯,腾讯 Android 工程师,热爱开源与分享,维护 Android 官方培训课程协作项目,关注 Android 应用性能优化的总结与分享,推崇 Android 官方最佳实践。
以时间值的形式衡量,也就是指应用与用户进入可交互状态所需的时间。...View 的整体渲染阶段,涵盖 measure、layout、draw 三部分,这里可尝试从层级、布局、渲染上取得优化收益。...最后是首屏数据加载阶段,这部分涵盖非常多数据相关的操作,也需要综合性优化,可尝试预加载、三级缓存或网络优先级调度等手段进行优化。...点击图标很久都不响应 如果我们禁用了预览窗口或者指定了透明的皮肤,那用户点击了图标之后,需要在创建启动页后才能真正看到应用闪屏。...首页显示太慢 现在应用启动流程越来越复杂,闪屏广告、热修复框架、插件化框架、各种SDK初始化,所有准备工作都需要集中在启动阶段完成。
冷启动的定义与可优化的点 如何衡量当前的性能指标,个人感觉,性能的衡量分三步: 指标制-> 指标采集 -> 性能基线与优劣评级, 以上三块组成性能量化工具,有了量化工具,就可以说APP性能是好是坏,以冷启动为例...单从技术上说感觉可以定义如下: 冷启动耗时 = 从APP进程创建到第一个有效页面帧[闪屏] 具体到实现上,涉及哪些环节,会怎样影响冷启动速度呢?...同理对于闪屏Activity的onCreate跟onResume阶段所做的处理类似 从图中就很容下发现,有些Flutterboost、埋点Json解析类的耗时操作被不小心关联进了Activit的启动流程中...对于整体冷启动优化效果:用perfetto看比较直接 优化前:1261ms 优化后:439ms 所用的优化除了上面的措施还有部分如下措施等: 延迟非必要receiver的注册 闪屏广告Layout布局按需加载...锁优化,进程线程间阻塞优化 所用的优化除了上面的措施还有部分如下措施等:核心原则 UI线程不做耗时操作 延迟非必要receiver的注册 闪屏广告Layout布局按需加载 锁优化,进程线程间阻塞优化
面对市面上五花八门的屏幕大小与分辨率,Android基于dp与res目录名称来适配的方案已无法满足一次编写全屏幕适配的需求,为了达到最优的视觉效果,开发过程中总是需要花费较多资源进行适配。...这样的好处在于,在大小相近的屏幕中,无论分辨率多大都不会对布局造成影响;但是当屏幕大小相差较大时,仅保证控件的绝对大小看起来就有些问题了。...在res目录下可以给各资源目录都加上例如'-1920x1080'等后缀来适配不同的屏幕,具体规则可见官网文档。这样可以针对不同的屏幕提供不同的布局,甚至针对pad与手机提供两套完全不同的布局样式。...public的,不用反射就能修改; pt的原意是长度单位磅,根据当前屏幕与设计图尺寸将metrics.xdpi进行修改就可以实现将pt这个单位重定义成我们所需要的相对长度单位,使修改之后计算出的1pt...,无论大小屏上看起来就只是将设计图缩放之后的结果。
领取专属 10元无门槛券
手把手带您无忧上云