我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android如何优化启动速度

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android如何优化启动速度

这篇文章给大家分享的是有关Android如何优化启动速度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

启动方式

应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动

冷启动(启动优化目标)

冷启动是指应用从头开始启动:系统进程在冷启动后才创建应用进程。发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动。

热启动

在热启动中,系统的所有工作就是将 Activity 带到前台。只要应用的所有 Activity 仍驻留在内存中,应用就不必重复执行对象初始化、布局加载和绘制。

温启动

温启动包含了在冷启动期间发生的部分操作;同时,它的开销要比热启动高。有许多潜在状态可视为温启动。例如:

  • 用户在退出应用后又重新启动应用。进程可能未被销毁,继续运行,但应用需要执行 onCreate() 从头开始重新创建 Activity。

  • 系统将应用从内存中释放,然后用户又重新启动它。进程和 Activity 需要重启,但传递到 onCreate() 的已保存的实例savedInstanceState对于完成此任务有一定助益。

启动流程中可优化的环节

启动流程中开发者可优化的环节不多,咱们可以从APP启动流程中寻找下

Android如何优化启动速度

APP启动过程如下:

  • 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;

  • system_server进程接收到请求后,向zygote进程发送创建进程的请求;

  • Zygote进程fork出新的子进程,即App进程;

  • App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;

  • system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;

  • App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;

  • 主线程在收到Message后,通过反射机制创建目标Activity,并回调Activity.onCreate()等方法。

  • 到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

所以,我们能优化的阶段只有 Application.onCreate() —> Activity.onWindowFocusChanged()

检测工具

启动时间检测

启动的时间怎样算是合适的?怎样一个时间范围内用户是感觉流畅的?Android Vitals在您的应用出现以下情况时将其启动时间视为过长:

  • 冷启动用了 5 秒或更长时间

  • 温启动用了 2 秒或更长时间

  • 热启动用了 1.5 秒或更长时间

那APP启动用了多长时间?用什么区检测?

Logcat Displayed

在 Android 4.4(API 级别 19)及更高版本中,logcat 包含一个输出行,其中包含名为 Displayed 的值。此值代表从启动进程到在屏幕上完成对应 Activity 的绘制所用的时间。

Android如何优化启动速度

adb 命令统计

adb shell am start -S -W [packageName]/[activityName]

C:\Users\****>adb shell
generic_x86_arm:/ $ am start -S -W com.miss.misslink/.MainActivity
Stopping: com.miss.misslink
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.miss.misslink/.MainActivity }
Status: ok
LaunchState: COLD
Activity: com.miss.misslink/.MainActivity
TotalTime: 941
WaitTime: 961
Complete

WaitTime:包括前一个应用Activity pause的时间和新应用启动的时间;
ThisTime:表示一连串启动Activity的最后一个Activity的启动耗时;
TotalTime:表示新应用启动的耗时,包括新进程的启动和Activity的启动,但不包括前一个应用Activity pause的耗时。

Android如何优化启动速度

我们一般只用 TotalTime,可以很清楚的知道APP的启动时间。那我们如何判断是哪些方法耗时太多导致APP启动时间过长呢?

CPU profile

API level >= 26

要在应用启动过程记录CPU活动,需要做以下操作

依次选择 Run > Edit Configurations

Android如何优化启动速度

勾选 Trace Java Methods(跟踪 Java 方法:在运行时检测应用,以在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。)

Android如何优化启动速度

依次选择 Run > Profile,将您的应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备上

主要分析的地方有3个: Flame Chart、 Top Down 、bottom up。

Android如何优化启动速度

API level < 26

对于API低于26的,我们可以调用 Debug API,调用起点 Application构造函数

public class MyApplication extends Application {        public MyApplication() {        //  没有指定绝对路径,就是相对路径,相对 sdcard        Debug.startMethodTracing("miss");    }    }

调用终点 Activity.onWindowFocusChanged()

@Override    public void onWindowFocusChanged(boolean hasFocus) {        super.onWindowFocusChanged(hasFocus);        Debug.stopMethodTracing();    }

如此一来会在 sdcard 路径下生成 miss 文件,双击打开即可

StrictMode 严苛模式

StrictMode是一个开发人员工具,它可以检测出我们可能无意中做的事情,并将它们提请我们注意,以便我们能够修复它们。StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问。帮助我们让磁盘和网络操作远离主线程,可以使应用程序更加平滑、响应更快

//Application onCreate 中使用    @Override    public void onCreate() {        if (BuildConfig.DEBUG) {            //线程检测策略            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()                    .detectDiskReads()   //读、写操作                    .detectDiskWrites()                    .detectNetwork()   // or .detectAll() for all detectable problems                    .penaltyLog()                    .penaltyDeath()                    .build());            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()                    .detectLeakedSqlLiteObjects()   //Sqlite对象泄露                    .detectLeakedClosableObjects()  //未关闭的Closable对象泄露                    .penaltyLog()  //违规打印日志                    .penaltyDeath() //违规崩溃                    .build());        }

优化点

  • 合理的使用异步初始化、延迟初始化、懒加载机制。

  • 启动过程避免耗时操作,如数据库 I/O操作不要放在主线程执行。

  • 类加载优化:提前异步执行类加载。

  • 合理使用IdleHandler进行延迟初始化。

  • 简化布局

  • 第三方库有些是有优化插件的,比如ARouter

黑白屏问题

当系统加载并启动 App 时,需要耗费相应的时间,这样会造成用户会感觉到当点击 App 图标时会有 “延迟” 现象,为了解决这一问题,Google 的做法是在 App 创建的过程中,先展示一个空白页面,让用户体会到点击图标之后立马就有响应。
如果你的application或activity启动的过程太慢,导致系统的BackgroundWindow没有及时被替换,就会出现启动时白屏或黑屏的情况(取决于Theme主题是Dark还是Light)。消除启动时的黑/白屏问题,大部分App都采用自己在Theme中设置背景图的方式来解决。

<style name="AppTheme.Launcher"><item name="android:windowBackground">@drawable/bg</item></style><activityandroid:name=".activity.SplashActivity"android:screenOrientation="portrait"android:theme="@style/AppTheme.Launcher"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

然后在Activity的onCreate方法,把Activity设置回原来的主题

@Override    protected void onCreate(Bundle savedInstanceState) {        setTheme(R.style.AppTheme);        super.onCreate(savedInstanceState);    }

这么做,只是提高启动的用户体验。并不能做到真正的加快启动速度。

感谢各位的阅读!关于“Android如何优化启动速度”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android如何优化启动速度

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android如何优化启动速度

这篇文章给大家分享的是有关Android如何优化启动速度的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。启动方式应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动冷启动(启动优化目
2023-06-25

Android应用启动速度优化

开发Android应用中,随着功能越来越多,启动速度越来越慢。有没有办法让自己应用启动速度快一点呢? 方法是人想出来的。先说说我的实现方法: 1 将onCreate 中初始化的内容,移动到线程中做初始化,加载等 2 初始化完成之后,通过Ha
2022-06-06

Android优化应用启动速度

一、应用的启动 启动方式 通常来说,在安卓中应用的启动方式分为两种:冷启动和热启动。1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。2、热启动:当启动应用时,后台已有该应用
2022-06-06

如何优化Linux主机启动速度

优化Linux主机启动速度是一个涉及多个方面的过程,包括硬件选择、内核配置、系统服务和守护进程的管理等。以下是一些有效的优化方法:使用SSD硬盘优势:使用SSD硬盘可以显著提高系统启动速度,因为SSD的读写速度远超传统HDD。建议:如果
如何优化Linux主机启动速度
2024-09-27

win10系统启动速度如何优化

要优化Win10系统的启动速度,你可以尝试以下几个方法:清理开机启动项:打开任务管理器(按Ctrl+Shift+Esc),切换到“启动”选项卡,禁用不需要在开机时自动启动的程序。禁用不必要的服务:打开任务管理器,切换到“服务”选项卡,隐藏M
2023-10-20

优化SpringBoot程序启动速度

Spring Boot 程序优化 一、延迟初始化Bean 一般在 SpringBoot 中都拥有很多的耗时任务,比如数据库建立连接、初始线程池的创建等等,我们可以延迟这些操作的初始化,来达到优化启动速度的目的。Spring Boot
2023-08-17

win7启动速度怎么优化

这篇文章主要介绍“win7启动速度怎么优化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win7启动速度怎么优化”文章能帮助大家解决问题。win7启动速度优化教程1、首先打开运行,输入“msconf
2023-07-01

Android启动优化

一、启动分类 Android的启动分冷启动、热启动、温启动。 1、冷启动:当启动应用时,后台没有这个应用的进程,需创建新的进程。 冷启动过程: click (点击应用图标)——>ipc——>Process.start——>ActivityT
2022-06-06

优化SpringBoot程序启动速度的实现

本文主要介绍了优化SpringBoot程序启动速度的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-15

如何优化vps速度

有几种方法可以优化VPS速度:1. 选择高性能的VPS主机:选择一家可靠且提供高性能VPS主机的供应商,确保服务器具有足够的处理能力和带宽。2. 使用优化的操作系统:选择轻量级的操作系统,如Linux的轻量级发行版,可以减少系统资源的消耗,
2023-08-21

Win8开机启动项怎么设置如何优化启动项提升开机速度

Win8系统在系统服务以及启动项方面进行了较大的优化与调整,因此不少新安装Win8系统的朋友会发现,Win8的开机速度要比Win7更快一些。不过随着用户安装的软件逐渐增多,并且目前很多软件都具备流氓性质,安装后会开机自动启动,导致Win8开
2022-06-04

Android性能优化(一)启动优化

以前做手机的时候,我非常重视app的性能优化。其实一直以来,在工作中我总会去强调性能优化的重要性。但是,很多时候,由于一些外界因素,我们对app的一些性能指标不会那么重视。但是,性能优化依然是做好一个产品的重中之重。试想一下,如果用户费了很
2022-06-06

NetBeans如何提升启动速度

这篇文章将为大家详细讲解有关NetBeans如何提升启动速度,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。NetBeans优化的目的是提高NetBeans的启动速度和运行速度。下面介绍的NetBeans优
2023-06-17

Android优化提升应用启动速度及Splash页面的设计方法

这篇文章主要介绍“Android优化提升应用启动速度及Splash页面的设计方法”,在日常操作中,相信很多人在Android优化提升应用启动速度及Splash页面的设计方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
2023-06-22

MySQL如何优化查询速度

前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。 但这些还完全不够,还需要合理的设计查询。 如果查询写的很糟糕,即使表结构再合理、索引再合适,也是无法实现高性能的。 谈到MySQL性
2022-05-23

win7关机速度如何优化

本篇内容介绍了“win7关机速度如何优化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!win7关机速度优化教程方法一: 1、首先使用“win
2023-07-01

ubuntu如何优化运行速度

优化 Ubuntu 的运行速度可以参考以下几个方面:1. 禁用不必要的服务和启动项:可以通过 Systemd 管理器或者命令行工具 systemctl 来禁用不需要的服务和启动项。可以使用命令 systemctl disable [serv
2023-08-29

如何优化mysql查询速度

要优化 MySQL 查询速度,可以采取以下几种方法:使用合适的索引:在查询中使用索引可以显著提高查询速度。确保表中的字段都有适当的索引,尤其是在经常用作查询条件的字段上。避免全表扫描:尽量避免对整个表进行扫描,可以通过添加索引或优化查询语句
如何优化mysql查询速度
2024-05-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录