看了一下2016年的WWDC关于优化启动时间的PPT,有些感悟和总结,记录一下。...这篇文章你能学到什么 ---- 理论: 我们在进入mian()函数之前发生了什么事情 Mach -O的格式 虚拟内存基础知识 二进制Mach -O怎么被加载和准备 实用部分: 怎么去计算启动时间 优化启动时间...Mach -O、虚拟内存速成课 ---- 主要简单的介绍了Mach -O和虚拟内存的知识,下文在app启动的时会有很多相关的术语,不知道会懵逼。...APP启动 ---- app启动的时候,内核会把app映射到一个新的内存空间,开始地址是随机的。 ? 然后内核通过Dyld来加载动态库。...在可执行文件中调用main() Pre-main() 总结 pre-mian 阶段主要是Dyld做的工作: 深度加载依赖的动态库 修正DATA pages的指针 运行初始化工作 篇幅有限,这边总结了原理,下篇总结启动时间优化相关
一、获取APP启动时间 1、adb命令行获取 adb shell am start -S -W com.xxxx.xxxx/com.xxxx.biz.main.ui.activity.SplashPageActivity...APP耗时 WaitTime = str(result[-2]).split(':')[-1].replace("\\n'", '') # APP启动耗时 TotalTime = str(result[...10次 for index in range(0, 10): # 写入每次启动时间 ws['B' + str(index + 2)] = WaitTime...import ( LineChart, Reference, ) lineimage = LineChart() 2、折线图属性 #折线图标题 lineimage.title = "启动时间...APP耗时 WaitTime = str(result[-2]).split(':')[-1].replace("\\n'", '') # APP启动耗时 TotalTime =
启动时间对于App的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该App进程的情况),另一种是热启动,即App从被切换到前台(点back退出后再点击图标启动...QA测试时,一般关注冷启动的启动时间。以下介绍三种测试启动时间的方法,供大家参考,可以有针对性的使用。...(2)点击收集图标,app完全启动后,使用ctrl+c结束视频录制。 (3)使用命令adb pullsdcard/lanch.mp4 ....可以把这里作为点击时间,然后根据体验要求,看到app启动页完全绘制完作为终止时间,这个时间减去点击时间就是app的启动时间。...以上两种方法,单从启动时间看,是无法定位出具体哪个函数耗时多一些,遇到启动时间大于预定的启动时间阀值时,需一步步的打log,分析查明原因。
真爱,请置顶或星标 作者:申国骏 https://www.jianshu.com/p/59a2ca7df681 随着App的逻辑不断庞大,一不注意就会将耗时的操作放置在应用启动过程之中,导致应用启动速度越来越慢...优化启动速度是几乎所有大型App应用开发者需要考虑的问题。优化启动速度之前首先需要准确测量App启动时间,这样有利于我们更准确可量化地看出优化效果,也可以指导我们进行持续优化。...热启动时间指在Application仍然存在的情况下,从用户点击桌面图标,到首页内容全部展示出来的时间。 App启动流程 要优化以及分析启动时间,需要先了解App的启动流程。...这导致了这次热启动实际上打log的时候发现有上次冷启动的开始时间,算成了冷启动,而且因为启动时间是上一次的,所以这次冷启动log的时间比实际时间长。...具体优化的方法可以看下一篇文章《如何优化Androd App启动速度》。
本文中所说的启动都指:冷启动。 冷启动:内存中不包含APP的数据,所有数据都需要从Mach-o载入到内存中,提供给应用使用。 热启动:内存中仍然存在APP的数据,数据不需要重新载入内存。...1.2 启动耗时查看 想要优化启动时间,就需要要知道启动时app都做了什么?通过添加环境变量可以打印出APP的启动时间分析(Edit Scheme -> Run -> Arguments) ?...1.3 提高main()函数之前的加载时间 1.动态库加载越多,启动越慢。 2.ObjC类,方法越多,启动越慢。 3.ObjC的+load越多,启动越慢。...根据本文中4.3,修改项目oreder.file配置 demo下载 用在我自己的项目中,冷启动平均减少了50毫秒的启动时间。...其实还是不错~ 参考链接: AppOrderFiles iOS优化篇之App启动时间优化
本人在做APP性能测试的时候,需要统计一下APP启动时间和进入首页的时间,之前采取的方案是图片做对比,后来采取了录屏,效果都不是很理想,在参考了网上关于手机log分析手机启动activity的教程,自己写了一个多线程类通过不停地启动关闭...APP,同时分析log中关于activity的lauch时间得到需要的数据。...APP Common.getInstance().sleep(9000); startApp.stopJuziApp();// 关闭APP Common.getInstance().sleep...; e.printStackTrace(); } } /** * 获取启动时间 * * @param line * 截取到的log信息 * @...return 返回double时间,单位s,默认0.00 */ public static double getLauchTime(String line) { Matcher matcher
作者 / Yacine Rezgui 应用启动时间是应用性能的关键衡量指标。应用启动后,用户期望能够得到快速响应并加载内容,当不符合预期时用户会感到失望。...Jetpack App Startup 库在应用启动时以一种简单、高效的方法来初始化组件。库开发者和应用开发者都可以使用 App Startup 简化启动流程,并显式指定初始化顺序。...每减少一个 ContentProvider 通常会有约 2ms 的收益,这可以显著提高应用启动速度。App Startup 还可以简化 延迟初始化组件 操作,从而帮助您进一步提高启动性能。...当 App Startup 进入稳定版本后,我们将更新诸如 WorkManager 和 ProcessLifecycle 之类的库,以从中受益。 App Startup 支持 API 14 及以上。...延迟初始化 我们强烈推荐您使用延迟初始化来进一步提升启动性能,您可以通过如下方式实现组件的延迟初始化,在 条目下为 Initializer 增加 tools:node="remove
image.png 核心部分 启动一个app,主要是通过startActivity打开对应的包: PackageManager packageManager = getPackageManager...实战代码 MainActivity.java: package com.exmple.startapp; import androidx.appcompat.app.AppCompatActivity
/平均工作时间)进行设定 异步痛点 代码不优雅,维护成本高 创建场景不好处理,不如依赖关系 冷启动(Cold start) 冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动...可见冷启动的必要条件是该APP进程不存在,这就意味着系统需要创建进程,APP需要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。因此本文重点谈论的是对冷启动相关的优化。...在最近任务给App加锁和启动方式有什么关系 某些厂商为了用户体验提供了给APP上锁的功能,目的就是让用户自己做主是上锁的APP不被杀,启动的时候不会处于冷启动方式,但是加锁也不是万能的,Low memory...这其中的道理简单说就是学习用户的使用习惯,提前将App进程创建好,当用户打开APP时不会出去冷启动。...Android APP启动时会出现白屏 由于应用程序启动时冷启动,系统会默认在启动时启动空白窗口 应用程序启动有三种状态,每种状态都会影响应用程序对用户可见所需的时间:冷启动,热启动和温启动。
2.通过命令adb shellam start -W -n +包名/Activity 启动页面,确认下手机页面跳转,然后dos下会显示启动时间,总共有三个,具体判断标准如下:启动时间参考如果只关心某个应用自身启动耗时...其中需要注意这边有一个LauchState状态,这个是代表冷启动(cold)还是暖启动 (hot),这个两个区别就是app进程在不在,具体还有一个warm 温启动,就是页面切换到后台放久一点就可以把...kill(myPid))这时的app进程还活着,用户此时又点击了桌面的启动图标,app进程不需要重新启动 但是actiivty需要重新创建 2)由于系统内存紧张 app进程被杀了 但是系统的back stack...还保留着活动 此时用户启动app hot start:进程存在activity也没有销毁(按下home键)此时再回到app 还有情况就是系统内存紧张调用了activity的onTrimMemory()...; 缺点: 1.环境配置相对复杂; 2.需要编写脚本; 3.需要编程基础; 测试标准: 1.测试多次求平均值,然后对比标准 2.竞品/新旧版本对比; 测试APP启动时间参考标准 Cold启动5s以下
APP通过一系列的操作, 使用AIDL的方式通过Binder 将数据交给了ATMS,(这里是启动应用的一次IPC通信,即Launcher和ATMS的一次通信)ATMS开始处理消息,Instrumentation...APP的进程是否存在 ,如果存在就直接启动目标Activity,如果不存在就创建进程。...如果当前是Launcher的话,存在进程,进入到 热启动流程 ,不存在,进入到 冷启动流程 。...return new MethodAndArgsCaller(m, argv); } 这里通过反射的方式调用了main方法,之后就进入到APP的主入口main方法了。...5、Zygote fork进程,并调用ActivityThread的main方法,也就是app的入口。
APP启动速度非常重要,APP启动速度慢,可能会造成用户体验不良好,尤其是在最近用Android studio之后,如果长时间不打开app,启动速度就会特别的慢,下面我们一起探讨一下影响app启动速度的原因...检测启动时间 首先我们要知道app的启动时间,然后你也可以凭着感觉来,这里我教大家一个装逼的方法: adb shell am start -W [packageName]/[.MainActivity...] 用adb命令可以检测启动时间,示例如下: ....WaitTime为我们所关注的启动时间 那么7551算不算启动时间长呢?...这是一个很长时间没有启动的app,当它第一次启动的时候就有很长的启动时间,下面来说怎么来减少吧。
测试场景 自动安装考研帮App(kaoyan3.1.0.apk),然后启动App 测试步骤 获取待测试app的packageName和Activity 配置Capability 连接设备 编辑脚本并运行...查看结果 运行前检查事项 检查设备是否连接 检查Appium server是否启动 检查Capability配置信息是否正确 测试脚本 test_kyb.py from appium import webdriver...,安装好后不要随意卸载这两个App。...【解决方案】点击启动Appium按钮后,出现[Appium] Welcome to Appium v1.7.2提示后再运行脚本 会话冲突 error: Failed to start an Appium...the App 【解决方案】重新启动Appium服务 Oppo设备系统 noReset配置 selenium.common.exceptions.WebDriverException: Message
APP通过一系列的操作, 使用AIDL的方式通过Binder 将数据交给了ATMS,(这里是启动应用的一次IPC通信,即Launcher和ATMS的一次通信)ATMS开始处理消息,Instrumentation...transaction.setLifecycleStateRequest( ResumeActivityItem.obtain(next.app.getReportedProcState...APP的进程是否存在 ,如果存在就直接启动目标Activity,如果不存在就创建进程。...如果当前是Launcher的话,存在进程,进入到 热启动流程 ,不存在,进入到 冷启动流程 。...return new MethodAndArgsCaller(m, argv); } 这里通过反射的方式调用了main方法,之后就进入到APP的主入口main方法了。
在上一节Activity的启动流程中,当app进程不存在(第一次启动)时,会先去创建进程。这里我们通过源码来解读app进程的启动流程。...走到这里我们总结下,在启动Activity时候,如果发现进程不存在则通过AMS以socket的方式告诉Zygote进程去启动一个新的进程,并返回进程的id。...Zygote进程socket服务端 这里就设计系统的启动过程。我们从android系统的启动源码开始进行分析。..."); return 10; } } 首先创建一个AppRuntime对象AppRuntime 继承 AndroidRuntime 判断程序启动参数,根据之前启动命令有参数--zygote...到此,我们就和前面AMS通过socket通信来启动一个进程的代码连接起来了。
类似桌面图标打开App的Intent 程序中需要一种通知,点击后的效果需要像点击桌面图标那样: 程序在前台就什么也不干。 程序在后台,就切换到前台。 程序未启动,就启动程序。...创建打开app的intent,自己尝试了一些写法有点bug——多次打开app——偶然性,而且不稳定?...最终从 launcher的源码中找到了系统桌面图标的点击打开app使用的Intent: ComponentName className = new ComponentName(packageName,...Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED; intent.setFlags(launchFlags); 注意: 上面最关键的是launchFlags,可以避免多次启动程序...:也就是程序已经启动了,在后台,然后点击通知后又闪出启动页面。
当前用户越来越关心APP的启动速度.而APP的启动和很多因素相关. eMMC的读写速度. CPU 的频率. App framework 的优化. App 代码的优化....其中eMMC的读写性能一般和HW有关,可做的工作不多.对于CPU的频率,大多数的芯片vendor 也在App启动是采用了boost,也就是需要把CPU 运行在maxfreq.而App framework...问题描述, 在chrome的启动中,发现chrome启动比较慢.其system server 的systracelog 如下....,频繁出现killempy process 势必影响app的启动时间..../100; } else { return totalProcessLimit/2; } } Solution 2 另一种方法便是在App启动的过程中,我们不需要
App的哪个页面。...其次要知道的是,Launch和其他APP,运行在不同的进程中,所以他们之间的通信是通过Binder去完成的,所以AMS是必不可少的。下面我们以启动微信为例,看看启动流程是怎样的。 ? ? ? ? ?...5.微信启动后告诉AMS,启动好了 6.AMS通过之前的记录找出微信的首页,告诉微信应该启动哪个页面 7.微信按照AMS通知的页面去启动就启动成功了。 ? 上述阶段是微信和AMS的交互过程。...创建好后告诉AMS微信启动好了,AMS就记录了这个APP的登记信息,以后AMS通过这个ActivityThread向APP发送消息。...APP的启动流程就是这样了,欢迎留言探讨,记得持续关注哦。 ?
近日在开发过程中,发现每次点击app从桌面启动都有一个在桌面明显的等待时间,机型越低端的越明显,冷启动优化看来已经势在必行,所以怒而一顿研究再解决之。...1冷启动 第一次启动、被用户杀死进程或系统自动回收进程后,整个app后台任务被清理,再次启动app,称为 冷启动。...特点:后台任务全部结束,回收进程 2热启动 用户点击返回键退回界面,后台任务没有杀死,再次点击启动app,称为 热启动。...的onCreate方法中执行耗时间的操作,就会出现白屏。...5白屏如何解决 大致有以下三种方法: 使用IntentService实现异步处理耗时的操作; 将背景图设置成我们APP的Logo图,作为APP启动的引导,现在市面上大部分的APP也是这么做的 将背景颜色设置为透明色
前言 我相信大家肯定遇到过Activity启动慢的BUG,在优化问题之前,我们都会自我测试一下Activity启动耗时是不是和测试给的数值一样,在我们没有高速相机的情况下,我们如何获得Activity...启动时间。...,整个时间包含onCreate,onResume,doTraversal,一般情况下am_activity_launch_time还是很客观地展现出一个activity启动时间。...但是有时候测试标准不一样,测试标准可能要求是整个界面完全显示出来,尤其是需要异步网络请求数据,后面几帧展现更多UI,对于这个情况,Activity启动时间就要远远大于am_activity_launch_time...但是通过am_activity_launch_time来衡量一个Activity启动时间还是很科学的。
领取专属 10元无门槛券
手把手带您无忧上云