深色模式
AppDelegate
在 iOS 应用中,AppDelegate
是一个核心的类,它负责管理应用程序的生命周期事件。它提供了一些重要的回调方法,用于处理应用启动、进入后台、进入前台、终止等事件。AppDelegate
是应用程序的入口,它是应用运行过程中与系统交互的桥梁。
AppDelegate 的结构
在 Swift 项目中,AppDelegate
通常定义在 AppDelegate.swift 文件中。它默认实现了 UIApplicationDelegate
协议,负责处理应用级别的事件。
swift
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
// 当应用启动并准备好运行时调用
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("应用已启动")
return true
}
// 当应用进入后台时调用
func applicationDidEnterBackground(_ application: UIApplication) {
print("应用进入后台")
}
// 当应用即将进入前台时调用
func applicationWillEnterForeground(_ application: UIApplication) {
print("应用即将进入前台")
}
// 当应用进入活动状态时调用
func applicationDidBecomeActive(_ application: UIApplication) {
print("应用已进入前台活动状态")
}
// 当应用即将终止时调用
func applicationWillTerminate(_ application: UIApplication) {
print("应用即将终止")
}
}
AppDelegate 的作用
1. 应用启动(Launching)
- 方法:
application(_:didFinishLaunchingWithOptions:)
- 时机:应用刚启动完成后会调用此方法。
- 常见操作:
- 初始化第三方库(如 Firebase、Crashlytics 等)。
- 配置应用的全局状态,如主题、设置等。
- 检查用户登录状态或加载初始数据。
示例:
swift
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("应用启动完成")
return true
}
进入后台(Background)
- 方法:
applicationDidEnterBackground(_:)
- 时机:当用户将应用切换到后台时调用。
- 常见操作:
- 保存用户数据或状态。
- 停止动画、音乐或其他不必要的任务。
- 释放不必要的资源,降低内存使用。
示例:
swift
func applicationDidEnterBackground(_ application: UIApplication) {
print("应用已进入后台")
}
进入前台(Foreground)
- 方法:
applicationWillEnterForeground(_:)
- 时机:当应用即将从后台进入前台时调用。
- 常见操作:
- 恢复 UI 状态或动画。
- 检查网络连接并更新内容。
- 重新加载用户数据或刷新界面。
示例:
swift
func applicationWillEnterForeground(_ application: UIApplication) {
print("应用即将进入前台")
}
应用变为活跃状态(Active)
- 方法:
applicationDidBecomeActive(_:)
- 时机:应用从后台进入前台,并进入活动状态时调用。
- 常见操作:
- 恢复暂停的任务,如视频或音乐播放。
- 重新启用传感器,如陀螺仪或加速度计。
示例:
swift
func applicationDidBecomeActive(_ application: UIApplication) {
print("应用已进入前台活动状态")
}
应用即将终止(Terminate)
- 方法:
applicationWillTerminate(_:)
- 时机:当系统即将终止应用时调用(通常是由于内存不足或用户手动关闭应用)。
- 常见操作:
- 保存未完成的工作。
- 清理资源,释放内存。
示例:
swift
func applicationWillTerminate(_ application: UIApplication) {
print("应用即将终止")
}
使用场景:AppDelegate 处理的事件
- 推送通知:在 AppDelegate 中注册远程推送通知。
- 后台任务:如位置更新或后台数据同步。
- 深度链接:处理通过 URL 打开的应用。
- 快捷操作:处理 3D Touch 快捷操作(Quick Actions)。
- 状态恢复:在终止或后台状态时保存和恢复应用状态。
AppDelegate 和 SceneDelegate 的关系
从 iOS 13 开始,苹果引入了 SceneDelegate,允许应用程序支持多窗口(如 iPad 上的 Split View)。AppDelegate
负责管理全局的应用事件,而 SceneDelegate
负责管理每个场景(窗口)级别的事件。
- AppDelegate:处理应用的启动、终止和全局事件。
- SceneDelegate:处理每个场景的生命周期事件,如进入前台或后台。