//当应用即将进从前台退出时调用,在此期间应用程序不接收消息或事件
- (void)applicationWillResignActive:(UIApplication *)application
//当应用开始在后台运行的时候调用
- (void)applicationDidEnterBackground:(UIApplication *)application
//当程序从后台将要重新回到前台(但是还没变成Active状态)时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application
//当应用即将进入前台运行时调用
- (void)applicationDidBecomeActive:(UIApplication *)application
//当程序将要退出时被调用,通常是用来保存数据和一些退出前的清理工作
- (void)applicationWillTerminate:(UIApplication *)application
对于各个阶段事件的处理可以放到上述代理方法中实现,或者在代码其他地方可以通过系统级通知来实现
目前项目中是通过通知的方式处理了以下事件:
UIApplicationWillResignActiveNotification:断开 socket 连接
UIApplicationDidBecomeActiveNotification:
1.重建 socket 连接;2.判断是否需要指纹或者Face ID 登录
UIApplicationWillResignActiveNotification:断开 socket 连接
UIApplicationDidEnterBackgroundNotification:
记录进入后台的时间,用于计算 App 再次进入前台时候的时间差
可扩展行为参考:这里
应用可以在applicationDidEnterBackground:方法中做些切向background状态前需要做的一些准备工作,当切向background状态时,所有的应用需要做以下事情:
(1)应用界面快照。当applicationDidEnterBackground:方法返回时,系统保存应用界面的快照,并且使用快照图片作为转换动画。如果在你的应用界面中有涉及到敏感信息的视图,则你应该在applicationDidEnterBackground:方法返回前隐藏或者修改这些视图。
(2)保存用户数据和应用状态信息。所有没有保存的改变都应该在切向background状态前写入磁盘以保存。这一步是必须的,因为你的应用在后台时很有可能因为多种其它原因而被很快kill掉。根据需要你可以在background thread后台线程中执行这些操作。
(3)释放尽可能多的内存资源。
applicationDidEnterBackground:方法允许最多有5秒的时间去完成任何任务然后返回。实际中,此方法应该尽可能快的返回。如果在时间到期之后,此方法没有返回,则应用即被kill掉,并且清除所占用的内存。如果你的应用确实需要更多的时间去执行任务,可以调用beginBackgroundTaskWithExpirationHandler:方法请求后台执行时间,然后启动一个能长期执行任务的线程。无论你是否启动一个执行后台任务的线程,applicationDidEnterBackground:方法都必须在5秒后退出。
网友评论