【问题标题】:Is applicationWillResignActive ever called before didFinishLaunchingWithOptions ends?在 didFinishLaunchingWithOptions 结束之前是否调用过 applicationWillResignActive?
【发布时间】:2013-06-02 07:39:44
【问题描述】:

是否会出现applicationWillResignActive:application:didFinishLaunchingWithOptions: 结束之前被调用的情况?

基本上,我可以指望application:didFinishLaunchingWithOptions: 在第一次触发applicationWillResignActive 之前总是完成吗?

【问题讨论】:

    标签: ios uiapplicationdelegate


    【解决方案1】:

    是的,-application:didFinishLaunching: 将始终在 -applicationWillResignActive: 之前调用

    查看此图片了解更多详情:

    【讨论】:

    • awesome image is awesome.
    【解决方案2】:

    Apple 在“应用程序状态和多任务处理”部分中的 iOS App Programming Guide 表明 applicationWillResignActive: 被调用作为您的应用程序通过处理运行循环处理事件的一部分,该运行循环仅在 @987654323 之后开始@ 已完成。

    此外,应用程序生命周期事件总是发生在主线程上,因此其中一个不可能抢占另一个或彼此并行运行。

    【讨论】:

      【解决方案3】:

      runloop 可以递归调用。

      application:disFinishLaunchigWithOptions: 的假设实现可以运行 runloop,进而允许从方法内传递通知。

      以下人为设计的示例将让 run loop 运行,但永远不会返回:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
          while (YES)
              [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
      }
      

      【讨论】:

      • 你能举一个这样的实现例子吗?
      • 谢谢。然而,这可能真的是假设
      • @Dk222 我见过这样的实现,例如在显示任何内容之前从服务器下载内容的应用程序。不过,我通常建议不要轮询 runloop。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      相关资源
      最近更新 更多