我正在尝试创建一个iOS崩溃报告工具。我想知道应用程序在终止后是否可以发送崩溃信息。
所以我的问题是:- 终止后iOS应用程序的生命周期是什么?- 在哪里可以阅读有关 iOS 在终止时对应用程序执行的操作的更多信息?
在应用程序崩溃时执行任何非异步安全任务都是非常值得推荐的!
- 当时不允许分配任何新内存
- 您只能使用异步安全代码(任何Objective-C代码都不是异步安全的)
- 您需要考虑到内存已经损坏
- 您需要实现异步安全网络代码
- 还有更多原因。
请参阅PLCrashReporter的作者Landon Fuller的博客文章:
- http://landonf.bikemonkey.org/code/crashreporting/Reliable_Crash_Reporting_1.1.20130119.html
- http://landonf.bikemonkey.org/code/objc/Reliable_Crash_Reporting.20110912.html
你試圖解決一個問題,那不是現實世界中的問題。人们确实会重新启动他们的应用程序,并将发送崩溃报告。
是的,一种...您可以在 iOS 终止崩溃的应用程序之前处理异常,但您无法执行任何异步操作(可能不完全正确,您可以将后台操作与过期处理程序一起使用,或在 iOS7 NSURLSession 中使用),例如将 A 文件发送到服务器,但您可以在下次重新启动时执行此操作。
这背后的想法是在 -applicationDidFinishLaunch 中设置异常处理程序:
-(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
中。如果应用程序挂起,则不会调用此方法。如果您的应用程序在终止后崩溃,您可以在此处监控应用程序计算机上的崩溃日志:
~/Library/Logs/CrashReporter/MobileDevice/<your iPhone’s name>/
来自 Apple 文档
如果应用在终止时正在运行(在前台或后台),系统会调用应用委托的应用程序 WillTerminate: 方法,以便您可以执行任何所需的清理。您可以使用此方法保存用户数据或应用状态信息,这些信息将用于在后续启动时将应用还原到其当前状态。您的方法大约有 5 秒的时间来执行任何任务并返回。如果未及时返回,则应用将被终止并从内存中删除。
向下滚动到"应用终止"以阅读有关此内容的更多信息。
希望它有任何帮助