ios - 拨出电话时的后台行为,iOS 7 与 iOS 8

标签 ios iphone ios7 ios8

当我的 iOS 应用程序通过执行以下操作调用电话时:

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

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

例如如果我将以下几行放在上述电话线下方:
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 并且应用程序没有进入后台,当我在电话中时,您实际上可以看到日志正在写入控制台。当通话终止时,我仍在我的应用程序中。

有人可以确认该行为,或将我指向相关文件吗?

最佳答案

是的,iOS 7 和 iOS 8 在这里有所不同。我也找不到关于它的文件。

所以在 iOS 7 中,如果你有来电 applicationWillResignActive: 将首先被调用。如果您拒绝电话 applicationDidEnterBackground 将不会被调用;但如果您接听电话 applicationDidEnterBackground 将被调用,当您结束电话并且您的应用再次激活时 applicationWillEnterForeground: 也会被调用。

但是在 iOS 8 中只有 applicationWillResignActive: 无论你接不接电话都会被调用。

关于ios - 拨出电话时的后台行为,iOS 7 与 iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27198588/

相关文章:

iphone - 线程崩溃问题

c# - 带有 APNS sharp 的苹果推送通知

iphone - 发送到实例的无法识别的选择器

iphone - 将 UITextField 添加到 UITableViewCell 仅在最后一个单元格中显示一个 textField

ios - iOS:UIView子类init会先调用[super init],然后再调用父类中的方法,为什么会调用[subclass initWithFrame:xx]?

ios - 如何确保 xib 文件在所有设备上正确显示?

ios - 在不选择通用应用程序的情况下检测iPhone还是iPad

ios - 在 UIBarButtonItem 中添加边框

ios - 仅在 iOS7 上将 hidesBottomBarWhenPushed 设置为 YES 时 UITabBarController subview 消失

ios - 转发 UIAlertView 的可变参数