iOS应用程序:崩溃和终止后是否有生命



我正在尝试创建一个iOS崩溃报告工具。我想知道应用程序在终止后是否可以发送崩溃信息。

所以我的问题是:- 终止后iOS应用程序的生命周期是什么?- 在哪里可以阅读有关 iOS 在终止时对应用程序执行的操作的更多信息?

在应用程序崩溃时执行任何非异步安全任务都是非常值得推荐的!

  1. 当时不允许分配任何新内存
  2. 您只能使用异步安全代码(任何Objective-C代码都不是异步安全的)
  3. 您需要考虑到内存已经损坏
  4. 您需要实现异步安全网络代码
  5. 还有更多原因。

请参阅PLCrashReporter的作者Landon Fuller的博客文章:

  1. http://landonf.bikemonkey.org/code/crashreporting/Reliable_Crash_Reporting_1.1.20130119.html
  2. 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 秒的时间来执行任何任务并返回。如果未及时返回,则应用将被终止并从内存中删除。

向下滚动到"应用终止"以阅读有关此内容的更多信息。

希望它有任何帮助

相关内容

最新更新