chload:通道占用比,能够体现WiFi信道的繁忙情况。chload值越高表示网络状态越差,chload值大于500时网络质量差,大于800时网络基本不可用。
rssi:信号强度,-30表示信号很强,-80表示信号很弱。
noise:-80为干扰环境,到-60以上就是强干扰。
具体如下图所示:

Launch分析将应用的冷启动过程拆解为以下几个阶段:
阶段 | 说明 |
|---|---|
Process Creating | 应用进程创建 |
Application Launching | 应用启动阶段 |
UI Ability Launching | UIAbility启动阶段 |
UI Ability OnForeground | 应用进入前台阶段 |
First Frame - App Phase | 应用提交首帧渲染阶段 |
First Frame - Render Phase | 渲染服务提交首帧渲染阶段 |
日志关键字 | 描述 |
|---|---|
页面名 lifecycle change to onWillShow state | 页面显示之前 |
页面名 lifecycle change to onShown state | 页面显示时 |
页面名 lifecycle change to onWillHide state | 页面隐藏之前 |
页面名 lifecycle change to onHidden state | 页面隐藏时 |
05-10 11:07:09.086 5643-5643 C02C11/com.exa...tion/APPSPAWN pid-5643 I [asan_detector.c:176]SetAsanEnabledEnv cold start app com.example.myapplication
05-10 11:14:54.636 1356 1356 I C03922/com.example.myapplication/AceNavigation: [(100000:100000:scope)] splash lifecycle change to onWillShow state. 05-10 11:14:54.638 1356 1356 I C03922/com.example.myapplication/AceNavigation: [(100000:100000:scope)] splash lifecycle change to onShown state. 05-10 11:15:09.777 1356 1356 I C03922/com.example.myapplication/AceNavigation: [(100000:100000:scope)] splash lifecycle change to onWillHide state. 05-10 11:15:09.777 1356 1356 I C03922/com.example.myapplication/AceNavigation: [(100000:100000:scope)] main lifecycle change to onWillShow state. 05-10 11:15:09.777 1356 1356 I C03922/com.example.myapplication/AceNavigation: [(100000:100000:scope)] splash lifecycle change to onHidden state. 05-10 11:15:09.794 1356 1356 I C03922/com.example.myapplication/AceNavigation: [(100000:100000:scope)] main lifecycle change to onShown state.
在DevEco Profiler工具的分析结果中输入navDestinationName关键字找到进入引导页和进入主页时的Trace信息,分析该过程线程的运行状态。

如该过程应用大部分时间处于休眠态(Sleeping),并且问题场景引导页停留时长相对固定(比如15s),则推测属于应用业务逻辑异常场景下设计相关问题(比如启动过程需要访问服务器获取数据,等待一段时间未有返回结果则停止等待,进入主页),需要排查应用业务逻辑。

找到应用进程泳道,将应用进入前台阶段(UI Ability OnForeground)阶段框选起来查看该阶段应用线程的运行状态。如发现大多数时间都处于Running状态,可知应用在此处执行耗时操作。

然后找到ArkTS Callstack泳道并点击,可以看到应用在该阶段的调用栈,查看调用栈中的函数名以及耗时占比情况可得到该部分耗时是由于Manager管理类在初始化间接调用了SDK.so的初始化方法,SDK初始化时间较长导致。

找到应用主线程泳道,将UIAbility启动阶段框起来查看该阶段线程的运行状态和Trace信息,Trace信息从上到下显示表示上面Trace打点对应的函数直接或间接调用了下面Trace打点对应的函数,因此分析耗时原因主要分析下面的Trace打点。如发现大多数时间处于Running状态,耗时主要集中在H:SourceTextModule::Evaluate部分,则应用在启动过程时加载import的模块时耗时较多,导致应用启动慢。

场景一:RN应用启动耗时:可点击主线程泳道,在Slice List中过滤组件创建的Trace关键字,在下图中可看到有RNSurface组件创建,可知该应用属于RN应用。RN应用中RNOH_JS线程负责构造节点树并提交到应用主线程完成渲染,可排查RNOH_JS线程。

查看RNOH_JS线程Trace信息,可看到耗时主要集中在loadBundle部分(加载包含应用程序代码的JS文件,支持应用启动、更新等功能)。

场景二:初始Web页面加载耗时:根据下表中对应关键字找到Trace点,计算Web加载各阶段耗时。
阶段 | 相关Trace关键字 | 耗时 |
|---|---|---|
Web组件初始化 | H:NWebImpl | CreateNWeb到H:NavigationControllerImpl::LoadURLWithParams | url= | 24ms |
导航流程 | H:NavigationControllerImpl::LoadURLWithParams到H:NavigationBodyLoader::StartLoadingBody | 274ms |
html解析以及重要子资源下载,页面加载完成 | H:NavigationBodyLoader::StartLoadingBody到H:RenderFrameImpl::didStopLoading | 466ms |
页面加载完成到开始显示网页 | H:RenderFrameImpl::didStopLoading到之后第一个SkiaOutputSurfaceImplOnGpu::SwapBuffers | 12ms |
总耗时 | 776ms |

使用DevTools工具抓取页面加载过程,在“性能”选项卡下选择“主要”,可以看到有时长246ms的长任务耗时警告,整体耗时主要是在执行脚本,时间为500ms。

应用冷启动慢的原因有: