如何知道iOS应用程序何时响应/挂起时间



有没有办法知道iOS应用程序何时对用户交互做出响应?例如,用户点击按钮,应用程序执行工作,此工作可能会将其他工作异步分派到主线程。为了将其用作性能指标,我想知道该应用程序能够再次以响应的方式处理触摸事件的确切时刻。有了这个,我想要像";平均而言,该应用程序在用户交互后55ms变得响应";。

目前,在用户交互后,我立即观察主队列,并有一个向其提交样本的启发式方法,以便根据主队列的响应性来估计响应性,假设主队列的反应性与应用程序的响应性直接相关。只有在队列再次一致响应一段时间(例如100ms(之前才会进行采样。这种方法有缺点吗?我还有其他方法可以/应该用来做这件事吗?

使用MetricKit来观察挂起时间不是一种选择,因为我无法将这些结果用于特定的交互(即,知道不同的交互如何影响挂起时间(。

你说:

例如,用户点击一个按钮,应用程序就会执行工作。我想知道应用程序再次能够以响应的方式处理触摸事件的确切时刻。

主线程应该永远不要被阻塞。它应该始终具有响应性。(如果你的应用程序需要,你可以禁用UI,但无论如何都不要阻止主线程。(

因此,考虑到这一点,如果你正在开始一些需要一点时间的过程,你应该:

  1. 如果你想让应用程序让用户知道一个耗时的过程即将开始,请将该chrome添加到UI中(例如UIActivityIndicatorView,也就是"微调器",或其他什么(;

  2. 在后台队列上异步启动该任务(这样它就不会阻塞主线程(;

  3. 给该任务一个"完成处理程序"闭包,它将在后台工作完成时调用该闭包;

  4. 在该完成处理程序中,调用者可以提供代码来删除上面第一步中添加的任何chrome。

简而言之,与其担心"应用程序如何知道主线程何时再次空闲",不如首先集中精力消除任何会阻塞主线程的东西。请参阅了解并消除应用程序中的挂起。

最新更新