性能优化--启动优化(网易云音乐启动方案)
前言:关于app的启动方式,一关有三种,分别是冷启动,热启动,温启动。
冷启动:系统内部没有该应用的进程,会完成一整套的进程分配到后续UI渲染等的完整流程,耗时也是最久的。
热启动:系统后台还保留着该应用的进程。如果应用程序的所有activity存在内存中,则应用程序可以避免重复对象初始化、渲染、绘制操作.。
如:app按了home键再返回回应用
温启动:温启动包含了冷启动的一些操作,由于app进程依然在。activity 不在内存中。消耗在冷启动跟热启动之间。
如 app一直按back键,直到回到桌面
优化方式:
1 视觉欺骗:
Android应用在点击launcher图标后,首先会启动一个主题窗口,在低版本的时候这个主题色是黑色的,而现在是白色,就是所谓黑白屏。这个主题窗口一直存在直到第一个activity的页面渲染出来,才会消失。所以如果不进行任何的处理,白屏时间稍微长一点,就会给用户带来很不好的体验。为了解决这个问题常规的方法有以下几种。
A 方案:将AndroidManifes文件中Application标签下的AppTheme进行修改,直接将预览页面去掉或者改为透明
<item name="android:windowDisablePreview">true</item><item name="android:windowIsTranslucent">true</item>
缺点:这种方式会在点击图标后,会停顿一下,直到activity页面渲染出来,会给人一种卡顿的感觉。
B 方案:新增首个Activity的主题,设置背景图片
<style name="AppTheme.Launcher1"><item name="android:windowBackground">@mipmap/ic_launcher</item> </style>@Override protected void onCreate(@Nullable Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.activity_splash);}
缺点:不仅仅需要在配置文件中进行配置,还需要对acitivty中对主题进行设置;另外单纯的设置图标在不同屏幕的设备下可能会导致拉伸等效果,无法保证很好的适配。
C 方案:终极方案,最推荐使用,B方案的改良,将图片背景该为布局背景,另外还可以加上activity的渐入效果(网页云音乐app方案)
<style name="AppTheme.LauncherTheme2"><item name="android:windowNoTitle">true</item><item name="android:windowFullscreen">true</item><item name="android:windowBackground">@drawable/splash_preview</item> </style>
splash_preview.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@android:color/holo_red_light"></item><item android:top="30dp"><bitmapandroid:gravity="top"android:src="@drawable/ic_launcher_round"></bitmap></item> </layer-list>
SplashActivity 页面什么都不做,只单纯放一张图片,这样会有一个图片渐入的效果,不清楚的同学可以打开网易云音乐看看启动。
优点:布局中以颜色为背景,不会担心拉伸等情况,在配上内部的小图片也很简洁。
2 启动时间缩短
A 首先要明白app启动做了什么事?
这里简单说明下,launcher进程向AMS进程发出启动acitivity的请求,AMS 又通过socket通信向zogote进程发出申请开启应用进程的请求,应用进程启动后,会依次去启动application,launcher标签的activity,直至第一个acitivty的页面完成渲染,我们才开始可以看到应用界面。
B 计算启动时间,针对性分析!
1 查看logcat日志
获取启动时间1: Displayed com.mnstartopt/.SplashActivity: +955ms 通过系统获取启动时间
2 通过adb 命令启动查看输出
adb命令获取启动时间2: adb shell am start -W com.mnstartopt/.SplashActivity // launch:COLD,WARM,HOT // ThisTime: 925 代表最后一个Activity启动时间; // TotalTime:925 代表所有Activity的启动时间; // WaitTime: 977 所有时间:ams启动activity总耗时;
3 自己写调试代码
public class LauncherTimer {public static long startTime;public static void logStart(){startTime = System.currentTimeMillis();}public static void logEnd(String tag){Log.d("time",tag+" launcher time = "+(System.currentTimeMillis()-startTime));} }
分别在Application的oncreat(), activity的onResume(),跟onWindowFocusChanged()方法输出。
@Override public void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);// 首帧开始绘制的时候会回调;LauncherTimer.logEnd("Tag2"); }
C查看重要方法内部,各部分执行消耗的时间。
在需要查看的方法内部,执行前调用
Debug.startMethodTracing("Launcher");
方法结束的地方执行:
Debug.stopMethodTracing();
当app运行之后会在sdcard 对于应用目录生成指定的文件,通过查看文件可以看到里面每个阶段执行消耗的时间。
D 针对性优化
1 在applciation内部使用线程池,将一些非必要同步启动的方法配置放入子线程中进行执行。
2 简化launcher页面的布局,减少布局层级,加快初始的显示。
3 将application和launcher标签的activity的onCreate 和onResume减少耗时久的操作,或者将庞大的资源/逻辑 进行拆分。查找哪块逻辑能不能进行 空间换时间。
性能优化--启动优化(网易云音乐启动方案)相关推荐
- Ubuntu 22.4网易云音乐启动失败处理方法
Ubuntu 22.04由于更换/升级了一些动态库,系统动态库x86_64-linux-gnu内libgio-2.0.so.0.libpangocairo-1.0.so.0引用库缺少了函数支持, 导致 ...
- Android项目实战之高仿网易云音乐启动界面
这一节我们来讲解启动界面,效果如下: 首次创建一个SplashActivity用来做启动界面,因为创建完项目默认是MainActivity做主界面,所以需要去掉,将启动配置到同时去掉SplashAct ...
- 1.Android高仿网易云音乐-启动界面实现和动态权限处理
0.效果 效果图依次为启动界面,第一次显示用户协议对话框,动态获取权限. 系列文章目录导航 目录 1.实现分析 启动基本上没有什么难点,但在真实项目逻辑还是比较多:就是布局,然后显示用户协议对话框,动 ...
- Day08_vant实现_网易云音乐案例
Day08_vant实现_网易云音乐案例 文章目录 Day08_vant实现_网易云音乐案例 知识点自测 铺垫(自学) 本地接口项目部署 今日学习目标 1. 案例-网易云音乐 1.0 网易云音乐-本地 ...
- Vue2使用vant实现_网易云音乐案例(可跟做练手项目)
文章目录 知识点自测 铺垫(自学) 本地接口项目部署 今日学习目标 1. 案例-网易云音乐 1.0 网易云音乐-本地接口 1.1 网易云音乐-本地接口启动 1.2 网易云音乐-前端项目初始化 1.3 ...
- 网易云音乐——一份情感的寄托
1.1 介绍产品相关信息 你选择的产品是? 我选择的产品是网易云音乐. 为什么选择该产品作为分析? 网易云音乐是我从高中就开始使用的音乐app,一直用到现在.我熟悉它喜欢它欣赏他,觉的这个产品身上有许 ...
- 网易云音乐IPO拟至少募30.4亿港元 开售半日已获足额认购
近日,网易云音乐启动全球公开招股.据市场消息透露,网易云音乐国际配售开售半天已获足额认购,并吸引诸多不同类型基金的参与,包括全球长线基金﹑专注新经济领域的投资基金及对冲基金. 据港交所公告,网易云音乐 ...
- CentOS7中安装网易云音乐
CentOS 7中安装网易云音乐 中一直没有一个像样的音乐播放器,网易云音乐与深度科技团队在半年前就启动了"网易云音乐7版",但是只提供了Ubuntu(14.04&16.0 ...
- 第二次作业:网易云音乐软件分析
1.产品相关信息 1.1你选择的产品是 网易云音乐 1.2为什么选择该产品作为分析? 因为它是我最喜爱的一款听歌软件,它里面的曲库有很多小众.冷门和大型乐团的音乐. 1.3该产品是怎么诞生的(在什么样 ...
最新文章
- python中与label类似的控件是_Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入...
- TensorFlow2-基础操作
- websocket使用
- 双绞线传输距离_一看就懂的网络传输介质介绍
- struts配置访问后缀为.do,.action,.*
- buuct 假如给我三天光明 misc_假如给我三天光明读后感
- 防风网-挡风抑尘墙:挡风抑尘墙
- .net mvc 导出excel表格
- android5.1蓝牙opp协议去掉Notification和Dialog操作提示
- gitlab使用SSH无法下载
- 什么软件画er图方便_图形图表设计器(Diagram Designer中文版)
- hutool对称加密
- Petalinux快速入门向导 (15) 第十四章.硬盘速度测试
- android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
- 微信公众号平台服务器配置请求url超时,绑定微信公众平台提示请求URL超时怎么办...
- 含文档+PPT+源码等]精品基于ssm的足球联赛管理系统的设计与实现vue[包运行成功]计算机项目源码Java项目毕设
- 【知识分享】如何制作Gif动态图
- php 405,php-Laravel异常405 MethodNotAllowed
- 这么简单?三层交换机算是被玩透了
- win10照片查看器_不想要软件左下角小标识?这个软件搞定WIN10美化+优化
热门文章
- 那些年,大厂在用的技术(前端)
- 联想服务器如何修改硬盘模式,联想thinkpad如何修改硬盘模式为ahci
- JS做的一款动感超酷banner
- android友盟微信分享到朋友圈,2020年友盟分享到微信朋友圈
- 【译】浏览器如何工作:在现代web浏览器场景的之下
- 软件质量(ISO/IEC 9126)的定义与特性
- k8s 重要的学习网站
- 小米9es更新MIUI 11.0.3.0稳定版本,解决耗电问题
- 包的概念与常见内置模块
- java计算机毕业设计特色农产品供需销售系统源码+数据库+系统+lw文档+mybatis+运行部署