我正在尝试创建一个 iOS 崩溃报告工具。我想知道应用程序是否可以在终止后发送崩溃信息。
所以我的问题是: - 终止后iOS应用程序的生命周期是什么?- 我在哪里可以阅读更多关于 iOS 在终止时对应用程序所做的事情?
我正在尝试创建一个 iOS 崩溃报告工具。我想知道应用程序是否可以在终止后发送崩溃信息。
所以我的问题是: - 终止后iOS应用程序的生命周期是什么?- 我在哪里可以阅读更多关于 iOS 在终止时对应用程序所做的事情?
在应用程序崩溃时执行任何非异步安全任务是非常不推荐的!
请参阅 PLCrashReporter 的作者 Landon Fuller 的这些博客文章:
您正在尝试解决一个问题,这在现实世界中不是问题。人们确实会重新启动他们的应用程序并将发送崩溃报告。
是的,一种......您可以在iOS杀死崩溃的应用程序之前处理异常,但是您不能执行任何异步操作(可能不完全正确,您可以使用带有过期处理程序的后台操作,或者在iOS7 NSURLSession中),例如就像将文件发送到服务器一样,但您可以在下次重新启动时执行此操作。
这背后的想法是在 -applicationDidFinishLaunching 中设置一个异常处理程序:
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSSetUncaughtExceptionHandler(&myExcHandler);
/* your code*/
}
myExcHandler 是一个 C 回调,它接受一个NSException
作为参数,当异常发生时它将被调用。
void myExcHandler(NSException *exception)
{
//set something on NSUserDefault to check at next start
}
必须说有很多可用的崩溃报告库。不要重新发明轮子;-)
来自苹果文档
如果您的应用程序在终止时正在运行(在前台或后台),系统会调用您的应用程序委托的 applicationWillTerminate: 方法,以便您可以执行任何所需的清理。您可以使用此方法保存用户数据或应用程序状态信息,以便在后续启动时将应用程序恢复到当前状态。您的方法有大约 5 秒的时间来执行任何任务并返回。如果它没有及时返回,应用程序将被杀死并从内存中删除。
向下滚动到“应用程序终止”以阅读有关此的更多信息。
希望它有任何帮助
您获得的应用程序终止的最后一个事件是在applicationWillTerminate
方法中。如果应用程序被挂起,则不会调用此方法。如果您的应用程序在此处终止后崩溃,您可以在您的应用程序机器上监控崩溃日志:
~/Library/Logs/CrashReporter/MobileDevice/<your iPhone’s name>/