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

时间:2013-10-21 11:44:27

标签: iphone ios objective-c ipad

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

所以我的问题是: - 终止后iOS应用程序的生命周期是什么? - 我在哪里可以阅读更多关于iOS在终止时应用的内容?

4 个答案:

答案 0 :(得分:7)

在应用崩溃时执行任何非异步安全任务非常 - 推荐!

  1. 当时不允许分配任何新内存
  2. 您只能使用异步安全代码(任何Objective-C代码异步安全)
  3. 您需要考虑内存已损坏
  4. 您需要实施异步安全网络代码
  5. 还有很多其他原因。
  6. 请参阅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
    3. 您正在尝试解决问题,这在现实世界中不是问题。人们会重新启动他们的应用并发送崩溃报告。

答案 1 :(得分:3)

是的,某种......你可以在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
}

必须说有大量可用的崩溃报告库。不要重新发明轮子; - )

答案 2 :(得分:0)

来自Apple docs

  

如果您的应用在终止时正在运行(在前台或后台),系统将调用您的应用委托的applicationWillTerminate:方法,以便您可以执行任何所需的清理。您可以使用此方法保存用于在后续启动时将应用程序还原到其当前状态的用户数据或应用程序状态信息。您的方法有大约5秒的时间来执行任何任务并返回。如果它没有及时返回,应用程序将被终止并从内存中删除。

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

希望它有任何帮助

答案 3 :(得分:0)

您申请终止的最后一个事件是applicationWillTerminate方法。如果应用程序暂停,则不会调用此方法。如果应用程序在终止后崩溃,您可以监视应用程序计算机上的崩溃日志:

~/Library/Logs/CrashReporter/MobileDevice/<your iPhone’s name>/