Android App 启动状态有几种?
startup state
- Android 启动状态(startup state)
- 1.1、冷启动(Cold Start)
- 1.2、温启动(Warm Start)
- 1.3、热启动(Hot Start)
- 1.4、后台启动(Background Start)
- 优化(套话)待续
- 参考地址
Android 启动状态(startup state)
1.1、冷启动(Cold Start)
当应用尚未在内存中运行时,用户点击应用图标或通过其他方式启动应用时,会触发冷启动。
在这种情况下,应用需要从头开始加载并初始化,这可能需要一些时间,用户可能会感到启动时间较长。
启动流程:
https://blog.csdn.net/weixin_35691921/article/details/116143407?spm=1001.2014.3001.5501
启动时长:
可以理解为Application.onCreate() 到 Activity.onResume()
或者使用adb命令与性能测试工具
adb shell am start -W -n com.example.package/.MainActivity
1.2、温启动(Warm Start)
温启动介于冷启动和热启动之间。当应用在内存中部分被回收但仍有一些资源保留时,再次启动应用将触发温启动。这种情况下,应用需要重新初始化一些资源,但不需要完全从头开始加载。
温启动有很多场景,例如:
-
用户按连续按返回退出了app,然后重新启动app;
-
由于系统收回了app的内存,然后重新启动app。
-
进程仍然存在而Activity销毁
温启动的场景可以使用:onSaveInstanceState去保存需要的数据状态,在重建的时候可以在onCreate和onRestoreInstanceState中的参数去获取销毁前保存的数据。
Configuration 变换和主题切换也会触发:onSaveInstanceState和onRestoreInstanceState
App运行之后切换横竖屏,通过上面代码实验得到的结果是:
I/com.zj.activitylifecycle.LifeCycleActivity: —> onCreate
I/com.zj.activitylifecycle.LifeCycleActivity: —> onStart
I/com.zj.activitylifecycle.LifeCycleActivity: —> onResume
I/com.zj.activitylifecycle.LifeCycleActivity: —> onPause
I/com.zj.activitylifecycle.LifeCycleActivity: —> onSaveInstanceState
I/com.zj.activitylifecycle.LifeCycleActivity: —> onStop
I/com.zj.activitylifecycle.LifeCycleActivity: —> onDestory
I/com.zj.activitylifecycle.LifeCycleActivity: —> recreate
I/com.zj.activitylifecycle.LifeCycleActivity: —> onStart
I/com.zj.activitylifecycle.LifeCycleActivity: —> onRestoreInstanceState
I/com.zj.activitylifecycle.LifeCycleActivity: —> onResume
————————————————
原文链接:https://blog.csdn.net/mypotatolove/article/details/82217620
1.3、热启动(Hot Start)
重新启动,而不是从完全关闭的状态开始。
当应用已经在内存中运行,但用户在应用中导航到其他界面或按下 Home 按钮后,再次返回应用时,会触发热启动。
热启动相对较快,因为应用的部分状态和资源已经存在于内存中。
1.4、后台启动(Background Start)
后台启动指的是当应用在后台运行,而不在前台显示时触发的启动方式。这可能是由于应用接收到推送通知、执行定时任务或其他后台事件触发的。后台启动通常是对用户不可见的,因为应用不会立即出现在屏幕上。
优化(套话)待续
Android应用的冷启动优化是一个复杂而关键的任务。以下是一些具体的优化策略,帮助你提高Android应用的冷启动性能:
-
使用启动页(Splash Screen): 引入一个启动页,显示应用程序的标志或其他欢迎信息。这不仅可以为用户提供启动反馈,还可以让应用在后台进行一些初始化工作,从而减少用户感知的启动时间。
-
延迟加载: 通过将不是必需立即加载的组件延迟初始化,可以减小应用程序启动时的初始负担。使用懒加载模式,只有在需要时才初始化和加载相关组件。
-
应用程序分割(App Slicing): 使用应用程序分割特性,以便将应用程序的不同部分进行拆分并仅在需要时下载。这有助于减小APK文件的大小,加快应用程序下载和安装的速度。
-
减小APK大小: 优化资源、压缩图片、删除不必要的资源文件和代码,以减小APK的大小。这不仅有助于更快地下载和安装应用程序,还有助于加快应用的启动速度。
-
使用ProGuard进行代码混淆和优化: ProGuard是一个代码混淆和优化工具,可以帮助减小APK大小并提高运行时性能。确保在发布应用程序之前使用ProGuard来混淆和优化代码。
-
使用合适的数据存储: 使用合适的本地存储方式,以减小启动时需要加载的数据量。尽可能使用轻量级的数据存储,例如SharedPreferences或SQLite数据库。
-
异步初始化: 将应用程序的初始化任务异步执行,确保不会阻塞主线程。可以使用
AsyncTask、Loader、或者其他异步加载框架。 -
合理使用多线程: 在合适的情况下,使用多线程来进行一些耗时的初始化工作。但要注意在主线程上执行与UI相关的任务,以确保良好的用户体验。
-
优化布局文件: 精简布局文件,避免过度嵌套和不必要的层次结构。这有助于提高布局文件的加载速度。
-
使用预加载(Preloading): 在应用启动时预加载即将使用的资源和数据,以减小用户导航到相关页面时的加载时间。
-
性能分析和调试工具: 使用Android Studio提供的性能分析工具来检查应用程序的性能瓶颈,例如CPU使用率、内存使用情况等。这有助于精确定位问题并进行优化。
-
适配Android Vitals: 关注Android Vitals中的启动时间指标,如应用程序启动时间(App Start Time),确保在各种设备上都有较好的性能。
通过结合以上策略,可以显著提高Android应用的冷启动性能,提升用户体验。最终的优化方案可能需要根据具体应用的特点和需求进行调整。
参考地址
Android性能优化(一)App启动原理分析及启动时间优化:
https://blog.csdn.net/sakuramashiro/article/details/78986167
Android 性能优化:使用 TraceView 找到卡顿的元凶:https://www.ituring.com.cn/article/273967
相关文章:
Android App 启动状态有几种?
startup state Android 启动状态(startup state)1.1、冷启动(Cold Start)1.2、温启动(Warm Start)1.3、热启动(Hot Start)1.4、后台启动(Background Start) 优…...
Spring Cloud Alibaba Sentinel 简单使用
Sentinel Sentinel 主要功能Sentinel 作用常见的流量控制算法计数器算法漏桶算法 令牌桶算法Sentinel 流量控制Sentinel 熔断Sentinel 基本使用添加依赖定义资源定义限流规则定义熔断规则如何判断熔断还是限流自定义 Sentinel 异常局部自定义异常全局自定义异常系统自定义异常…...
nvm切换node后,没有npm
当我们想要在不同的 Node.js 版本之间切换的时候,通常会使用 nvm(Node Version Manager) 来完成。但是,当我们在使用 nvm 切换 Node.js 版本的时候,可能会遇到没有 npm 的情况。这种情况通常发生在我们在新环境或者重新…...
Redis-高性能原理剖析
redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz tar -zxvf redis-5.0.3.tar…...
ORA-00600 【3948】,ORA-00600 【3949】
前言 这个报错没有从ORA600那个tool中查到。 回顾 环境 环境是windows 11203 rac环境,非归档数据库 有部分数据文件建到了本地文件系统。目标是将部分数据文件通过switch to copy的形式移动到diskgroup里 流程 srvctl关闭双节点, 启动单节点到moun…...
flink 查看写入starrocks的数据量 总行数
针对该connector: https://github.com/StarRocks/docs.zh-cn/blob/main/loading/Flink-connector-starrocks.md...
全链路压测的步骤及重要性
全链路压测是一种系统性的性能测试方法,旨在模拟真实用户场景下的完整操作流程,全面评估软件系统在不同压力下的性能表现。这种测试方法对于保证应用程序的高可用性、稳定性和可扩展性至关重要。 1. 全链路压测概述 全链路压测是在模拟实际用户使用场景的…...
使用Python实现几种底层技术的数据结构
使用Python实现几种底层技术的数据结构 数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这…...
前端面试题【72道】
文章目录 1. 说说你对盒子模型的理解2. css选择器有哪些?优先级?哪些属性可以继承?3. 元素水平垂直居中的方法有哪些?如果元素不定宽高呢?4. 怎么理解回流跟重绘?什么场景下会触发?5. 什么是响应…...
OpenGL 绘制文本(QPainter)
文章目录 一、简介二、实现代码三、实现效果一、简介 OpenGL中并没有绘制文本的相关函数,因此这里仍然用的是Qt中的QPainter工具来绘制文本,但是其相关的定位这里仍然会用OpenGL中的坐标转换。这里对其也进行封装一下,方便后续使用。 二、实现代码 TextDrawable.h #ifndef T…...
windows电脑连接Android和iPhone真机调试
windows电脑连接Android和iPhone真机调试 目前用的是Hbuilder X编辑器,在正常情况下,Android手机需要在 "设置 ----> 更多设置 ----->关于手机 ------> 版本号(手指点击5-7下即可打开开发者模式)"(我的是vivo的…...
windows上 adb devices有设备 wsl上没有
终于解决了!!!! TAT,尝试了很多种办法。 比如WSL中的adb和Windows中的adb版本必须一致,一致也没用,比如使用 ln 建立链接也没用。 这个解决办法的前提是windows中的abd是好用的。 ●在windows…...
释放搜索潜力:基于Docker快速搭建ES语义检索系统(快速版),让信息尽在掌握
搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…...
JS--localStorage设置过期时间的方案(有示例)
原文网址:JS--localStorage设置过期时间的方案(有示例)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍如何使用localStorage设置数据的过期时间。 问题描述 localStorage是不支持设置过期时间的,cookie虽然支持设置过期时间但它存的数据量很小。所…...
JNPF开发平台凭什么火?
一、关于低代码 JNPF平台在提供无代码(可视化建模)和低代码(高度可扩展的集成工具以支持跨功能团队协同工作)开发工具上是独一无二的。支持简单、快速地构建及不断改进Web端应用程序,可为整个应用程序的生命周期提供全…...
关于“计算机中由于找不到msvcr120.dll,无法继续执行代码5种解决方法
今天,我想和大家分享一下关于“由于找不到msvcr120.dll,无法继续执行代码5种解决方法”的话题。在我们日常的使用中,有时候会遇到这样的问题:在运行某个程序时,突然提示“无法继续执行代码,因为找不到msvcr120.dll”。…...
LR学习笔记——基本面板
文章目录 面板介绍色彩调整区域明暗调整区域纹理及质感色彩饱和 面板介绍 面板如上图所示 基本可分为几个板块:色彩、明暗、纹理及质感、色彩饱和 色彩调整区域 色温:由蓝色和黄色控制色调:由绿色和洋红控制 互补色:蓝色对黄色&…...
Cloud 微服务
架构 一 单体架构 1 概念 将项⽬所有模块(功能)打成jar或者war,然后部署⼀个进程。 互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这样可以减少开发、…...
若依前后端分离版,快速上手
哈喽~大家好,这篇来看看若依前后端分离版,快速上手(肝了挺久的)。 🥇个人主页:个人主页 🥈 系列专栏:【Springboot和Vue全栈开发】…...
Java-抽象类、抽象方法
【1】抽象类和抽象方法的关系: 抽象类中可以定义0-n个抽象方法。 【2】抽象类作用: 在抽象类中定义抽象方法,目的是为了为子类提供一个通用的模板,子类可以在模板的基础上进行开发,先重写父类的抽象方法,…...
Python调试工具copaw:轻量级、可扩展的pdb增强方案
1. 项目概述:一个轻量级、可扩展的Python调试工具在Python开发中,调试是每个开发者都绕不开的日常。无论是追踪一个难以复现的Bug,还是理解一个复杂库的内部数据流转,我们都需要依赖调试器。pdb是Python自带的调试器,功…...
平台费用继续抬升之后跨境卖家如何判断哪些订单值得接
成本挤压下的订单抉择:跨境卖家的利润保卫战平台费用、物流成本、汇率波动……当一道道无形的“闸门”被抬高,原本宽阔的利润河道正逐渐变得狭窄。对于跨境卖家而言,每一个新订单的提示音,不再仅仅是收入的象征,更可能…...
如何永久保存微信聊天记录?开源工具WeChatMsg完整解决方案
如何永久保存微信聊天记录?开源工具WeChatMsg完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...
避坑指南:Android分屏开发中,SystemServer端那些容易忽略的Task生命周期与配置变更细节
Android分屏开发避坑指南:SystemServer端Task生命周期与配置变更的深度解析 在Android多窗口生态中,分屏模式因其高效的屏幕空间利用率而备受开发者青睐。然而,当应用需要适配分屏功能时,许多开发者往往只关注客户端UI适配&#x…...
Zsh-Ask:在终端无缝集成ChatGPT的极简AI助手插件
1. 项目概述与核心价值 如果你和我一样,是个重度命令行用户,每天大部分时间都泡在终端里,那么你一定遇到过这样的场景:写脚本时卡在一个正则表达式上,想不起来某个命令的某个参数怎么用,或者突然想不起来某…...
Python办公自动化实战:结合ChatGPT实现邮件、PPT、Excel与PDF批量处理
1. 项目概述:用Python与ChatGPT解放你的办公桌如果你每天的工作中,有超过一半的时间都在和Outlook、Excel、PowerPoint、PDF这些“老朋友”打交道,重复着复制粘贴、格式调整、邮件群发、报告生成的机械劳动,那么这篇文章就是为你准…...
使用Python快速调用Taotoken大模型API的完整入门教程
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Python快速调用Taotoken大模型API的完整入门教程 对于希望快速集成大模型能力的开发者而言,直接对接多个厂商的API…...
基于Next.js 14的现代化前端脚手架:从技术选型到项目实战
1. 项目概述:一个基于 Next.js 的现代化前端开发起点 最近在折腾一个前端项目,想找一个既现代又开箱即用的开发起点。市面上模板很多,但要么太臃肿,集成了太多我用不上的东西;要么又太简陋,连基本的代码规…...
告别默认蓝天!用Cesium SkyBox打造沉浸式游戏场景天空(附6张图资源包)
用Cesium SkyBox重构游戏世界的天空美学 在虚拟世界的构建中,天空从来不只是背景——它是氛围的塑造者、情绪的传导器,更是玩家第一眼看到的世界边界。当大多数开发者还在使用Cesium默认的蓝天白云时,聪明的创作者已经开始用自定义天空盒(Sky…...
软件工程师在TVA产业化浪潮中的角色定位与机遇(16)
重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“AI教…...
