iOS应用从终止状态(非后台运行)进入前台时如何调用指定方法
iOS冷启动执行指定逻辑解决方案
1. applicationWillEnterForeground:不触发的原因
applicationWillEnterForeground:的触发范围仅为应用已在后台存活、用户重新将应用切回前台的场景,完全终止状态下的冷启动不会调用该方法,所以你添加的日志不会被打印,这个方法本身就不匹配你当前的需求。
2. 终止状态启动的逻辑实现
冷启动的唯一系统回调是AppDelegate的application:didFinishLaunchingWithOptions:方法,你可以直接在这个方法内执行token校验逻辑,参考实现如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 基础配置初始化 [self setupGlobalConfig]; // 异步请求服务端校验access token有效性 [UserService checkAccessTokenValidWithCompletion:^(BOOL isValid) { dispatch_async(dispatch_get_main_queue(), ^{ if (isValid) { // token有效,切换首页为根控制器 [UIApplication sharedApplication].keyWindow.rootViewController = [HomeViewController new]; } else { // token失效,切换登录页为根控制器 [UIApplication sharedApplication].keyWindow.rootViewController = [LoginViewController new]; } }); }]; return YES; }
3. 兼容场景说明
- 如果你的项目使用了iOS 13及以上的SceneDelegate多场景机制,冷启动逻辑需要转移到
scene:willConnectToSession:options:方法中实现,application:didFinishLaunchingWithOptions:仅用于全局公共配置初始化 - 如果你后续需要增加后台切前台的token校验需求,再单独在
applicationWillEnterForeground:中添加对应逻辑即可,和冷启动逻辑互不影响 - 异步校验token期间建议添加临时过渡页,避免用户长时间看到启动页产生卡顿误解
内容的提问来源于stack exchange,提问作者Edward Pizzurro
相关产品推荐
相关产品推荐

