在拨打电话时的背景行为,iOS7与iOS8

时间:2014-11-29 03:35:00

标签: ios iphone ios7 ios8

当我的iOS应用通过执行以下操作拨打电话时:

NSString *telephoneUrl = @"tel:12345678";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:telephoneUrl]];

应用生命周期状态会发生什么?

e.g。如果我将以下行放在上面的电话线下面:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    NSLog(@"dispatch callback was called!!!");
});

在iOS 7上,applicationDidEnterBackground被调用,上面的代码无法运行,当电话终止时,我就在电话应用中。只有当我回到我的应用程序时才会写入控制台行。

但是,在iOS 8上,只调用了applicationWillResignActive并且应用程序没有进入后台,当我在电话中时,您实际上可以看到正在写入控制台的日志。当通话终止时,我仍然在我的应用程序内。

有人可以确认行为,还是指向相关文档?

1 个答案:

答案 0 :(得分:0)

是iOS 7& iOS 8在这里有所不同。我也无法找到相关文件。

因此,在iOS 7中,如果您有来电,则应首先调用applicationWillResignActive:如果您拒绝电话applicationDidEnterBackground将不会被调用;但是如果您接听电话,将调用applicationDidEnterBackground,当您结束电话并且您的应用再次变为活动状态时,也会调用applicationWillEnterForeground :.

但是在iOS 8中,无论您是否接听电话,都会调用applicationWillResignActive: