前言:关于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减少耗时久的操作,或者将庞大的资源/逻辑 进行拆分。查找哪块逻辑能不能进行 空间换时间。

性能优化--启动优化(网易云音乐启动方案)相关推荐

  1. Ubuntu 22.4网易云音乐启动失败处理方法

    Ubuntu 22.04由于更换/升级了一些动态库,系统动态库x86_64-linux-gnu内libgio-2.0.so.0.libpangocairo-1.0.so.0引用库缺少了函数支持, 导致 ...

  2. Android项目实战之高仿网易云音乐启动界面

    这一节我们来讲解启动界面,效果如下: 首次创建一个SplashActivity用来做启动界面,因为创建完项目默认是MainActivity做主界面,所以需要去掉,将启动配置到同时去掉SplashAct ...

  3. 1.Android高仿网易云音乐-启动界面实现和动态权限处理

    0.效果 效果图依次为启动界面,第一次显示用户协议对话框,动态获取权限. 系列文章目录导航 目录 1.实现分析 启动基本上没有什么难点,但在真实项目逻辑还是比较多:就是布局,然后显示用户协议对话框,动 ...

  4. Day08_vant实现_网易云音乐案例

    Day08_vant实现_网易云音乐案例 文章目录 Day08_vant实现_网易云音乐案例 知识点自测 铺垫(自学) 本地接口项目部署 今日学习目标 1. 案例-网易云音乐 1.0 网易云音乐-本地 ...

  5. Vue2使用vant实现_网易云音乐案例(可跟做练手项目)

    文章目录 知识点自测 铺垫(自学) 本地接口项目部署 今日学习目标 1. 案例-网易云音乐 1.0 网易云音乐-本地接口 1.1 网易云音乐-本地接口启动 1.2 网易云音乐-前端项目初始化 1.3 ...

  6. 网易云音乐——一份情感的寄托

    1.1 介绍产品相关信息 你选择的产品是? 我选择的产品是网易云音乐. 为什么选择该产品作为分析? 网易云音乐是我从高中就开始使用的音乐app,一直用到现在.我熟悉它喜欢它欣赏他,觉的这个产品身上有许 ...

  7. 网易云音乐IPO拟至少募30.4亿港元 开售半日已获足额认购

    近日,网易云音乐启动全球公开招股.据市场消息透露,网易云音乐国际配售开售半天已获足额认购,并吸引诸多不同类型基金的参与,包括全球长线基金﹑专注新经济领域的投资基金及对冲基金. 据港交所公告,网易云音乐 ...

  8. CentOS7中安装网易云音乐

    CentOS 7中安装网易云音乐 中一直没有一个像样的音乐播放器,网易云音乐与深度科技团队在半年前就启动了"网易云音乐7版",但是只提供了Ubuntu(14.04&16.0 ...

  9. 第二次作业:网易云音乐软件分析

    1.产品相关信息 1.1你选择的产品是 网易云音乐 1.2为什么选择该产品作为分析? 因为它是我最喜爱的一款听歌软件,它里面的曲库有很多小众.冷门和大型乐团的音乐. 1.3该产品是怎么诞生的(在什么样 ...

最新文章

  1. python中与label类似的控件是_Python高级进阶教程021期 pyqt5label控件进阶使用,设置兄弟控件,广告植入...
  2. TensorFlow2-基础操作
  3. websocket使用
  4. 双绞线传输距离_一看就懂的网络传输介质介绍
  5. struts配置访问后缀为.do,.action,.*
  6. buuct 假如给我三天光明 misc_假如给我三天光明读后感
  7. 防风网-挡风抑尘墙:挡风抑尘墙
  8. .net mvc 导出excel表格
  9. android5.1蓝牙opp协议去掉Notification和Dialog操作提示
  10. gitlab使用SSH无法下载
  11. 什么软件画er图方便_图形图表设计器(Diagram Designer中文版)
  12. hutool对称加密
  13. Petalinux快速入门向导 (15) 第十四章.硬盘速度测试
  14. android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...
  15. 微信公众号平台服务器配置请求url超时,绑定微信公众平台提示请求URL超时怎么办...
  16. 含文档+PPT+源码等]精品基于ssm的足球联赛管理系统的设计与实现vue[包运行成功]计算机项目源码Java项目毕设
  17. 【知识分享】如何制作Gif动态图
  18. php 405,php-Laravel异常405 MethodNotAllowed
  19. 这么简单?三层交换机算是被玩透了
  20. win10照片查看器_不想要软件左下角小标识?这个软件搞定WIN10美化+优化

热门文章

  1. 那些年,大厂在用的技术(前端)
  2. 联想服务器如何修改硬盘模式,联想thinkpad如何修改硬盘模式为ahci
  3. JS做的一款动感超酷banner
  4. android友盟微信分享到朋友圈,2020年友盟分享到微信朋友圈
  5. 【译】浏览器如何工作:在现代web浏览器场景的之下
  6. 软件质量(ISO/IEC 9126)的定义与特性
  7. k8s 重要的学习网站
  8. 小米9es更新MIUI 11.0.3.0稳定版本,解决耗电问题
  9. 包的概念与常见内置模块
  10. java计算机毕业设计特色农产品供需销售系统源码+数据库+系统+lw文档+mybatis+运行部署