如何计算从用户按下主屏幕上的启动按钮到应用程序处于活动状态的那一刻所需的时间(例如,直到第一个视图控制器的viewDidAppear方法)?
Id不需要以编程方式,但必须可靠。
类似地,在Android中,logcat可以用于此效果。
答案 0 :(得分:2)
您可以在Xcode上编辑方案并添加环境变量(DYLD_PRINT_STATISTICS = 1),如图像
所示运行应用程序时,详细信息将打印在调试器输出上,如下所示:
Total pre-main time: 481.88 milliseconds (100.0%)
dylib loading time: 71.70 milliseconds (14.8%)
rebase/binding time: 53.66 milliseconds (11.1%)
ObjC setup time: 40.04 milliseconds (8.3%)
initializer time: 316.33 milliseconds (65.6%)
slowest intializers :
libSystem.B.dylib : 16.71 milliseconds (3.4%)
请查看video了解详情。
答案 1 :(得分:1)
一个简单的实现是在应用程序main中启动StopWatch
,然后在ViewDidAppear
方法中获取时间结果:
public class Application
{
public static Stopwatch StartUpTimer;
static void Main(string[] args)
{
StartUpTimer = new Stopwatch();
StartUpTimer.Start();
UIApplication.Main(args, null, "AppDelegate");
}
}
public class MyUIViewController : UIViewController
{
public override void ViewDidAppear (bool animated)
{
Console.WriteLine (Application.StartUpTimer.ElapsedMilliseconds.ToString () + "ms to startup");
base.ViewDidAppear (animated);
}
}
答案 2 :(得分:1)
答案 3 :(得分:0)
由于您无法获得用户触摸主屏幕上应用程序图标的确切时间,因此我建议您从其他应用启动应用,这样您就可以获得应用启动的准确时间。< / p>
答案 4 :(得分:0)
可以使用 C api 获取进程启动时间
#import <sys/sysctl.h>
static CFTimeInterval processStartTime() {
size_t len = 4;
int mib[len];
struct kinfo_proc kp;
sysctlnametomib("kern.proc.pid", mib, &len);
mib[3] = getpid();
len = sizeof(kp);
sysctl(mib, 4, &kp, &len, NULL, 0);
struct timeval startTime = kp.kp_proc.p_un.__p_starttime;
return startTime.tv_sec + startTime.tv_usec / 1e6;
}
您也可以在 swift 中执行此操作,但这会更冗长。示例可以在 CwlUtils 中找到。
之后你可以用不同的方式计算启动时间。
例如我这样做:
let currentTime = CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970
let startupTime = currentTime - processStartTime()
关于我发现的完整帖子 here
答案 5 :(得分:-1)
在willFinishLaunchingWithOptions
.....
在您尝试配置的VC的applicationDidBecomeActive
或viewDidAppear
中停止计时器,并对其进行NSLog。