iOS关于applicationWillResignActive
背景:杀死app进程后点击推送打开app本应该进入相应页面,但却因为Face ID验证,无法跳转。
一、什么时候调用applicationWillResignActive?
- 屏幕锁屏
- 从前台进入后台
- 来电、短信弹窗
- Face ID或Touch ID验证
特注:指纹识别、面容识别的弹窗的级别非常之高,高到离谱,经过验证应用程序内部没有比指纹识别的window的级别更高的UIWindowLevel,也就说了他是系统级的弹窗。需要注意的是,如果指纹弹窗显示和消失应用程序会调用:
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationDidBecomeActive:(UIApplication *)application;
二、applicationWillResignActive中一般执行那些操作呢?
- 清理临时数据
- 暂停正在进行的任务
- 禁用计时器
- 限制OpenGL ES帧速率
- 游戏应该使用这种方法来暂停游戏。
三、如果在进行Face ID或者Touch ID验证时不想执行applicationWillResignActive中的操作怎么办?
可以转到applicationDidEnterBackground中执行相关操作,这个函数不会因Face ID或者Touch ID弹窗验证而执行,他只会在应用真正进入到后台的时候才会调用,可以避免清理掉一些关键信息导致app出现bug。
四、app前后台切换时执行函数顺序
//首次运行:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)applicationDidBecomeActive:(UIApplication *)application
//首次关闭(home):
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
//再次运行:
- (void)applicationWillEnterForeground:(UIApplication *)application
- (void)applicationDidBecomeActive:(UIApplication *)application
//再次关闭:
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
五、如何模拟app被杀死后再启动的状态?
xcode点击左上角要运行的项目图标->点击edit Scheme->Wait for executable to be launched
这样的话,app就会等你唤醒才会打开,可以选择widget唤醒、点击推送唤醒等等方式打开app,以达到杀死app后再打开的监控。