You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SwiftUI中如何判断应用是否被从后台移除?

SwiftUI 监测应用是否被从后台移除的实现方法

和传统Swift UIKit 中的实现逻辑完全对齐,SwiftUI 中有两种常用实现方案,具体使用步骤如下:

方案1:监听系统终止通知(全iOS版本兼容)

该方案直接复用 UIKit 体系下的UIApplication.willTerminateNotification通知,和UIApplicationDelegate中的applicationWillTerminate回调效果完全一致。

使用步骤:

  • 在应用入口的App结构体中,通过onReceive修饰符监听通知即可,示例代码:
import SwiftUI

@main
struct DemoApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        // 监听应用即将终止通知
        .onReceive(NotificationCenter.default.publisher(for: UIApplication.willTerminateNotification)) { _ in
            // 此处执行应用被终止前的逻辑,比如数据持久化、状态上报等
            print("应用即将被从后台移除")
        }
    }
}
  • 触发时机说明:该通知仅会在应用处于后台时,被用户主动上滑杀掉、或系统因内存不足回收进程时触发,应用正常退后台未被杀时不会触发。

方案2:结合ScenePhase监测(iOS 14+ 推荐)

SwiftUI 从iOS 14开始引入了ScenePhase枚举,用来声明式监听应用/场景的运行状态,更符合SwiftUI的语法规范,结合终止通知可以更精准的判断应用被移除时的状态。

使用步骤:

  • 首先在App结构体中声明环境变量scenePhase,监听场景状态变化,再配合终止通知做判断,示例代码:
import SwiftUI

@main
struct DemoApp: App {
    @Environment(\.scenePhase) private var scenePhase
    // 标记应用是否已经进入后台
    @State private var isEnteredBackground = false

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            switch newPhase {
            case .active:
                isEnteredBackground = false
            case .background:
                isEnteredBackground = true
            case .inactive:
                break
            @unknown default:
                break
            }
        }
        .onReceive(NotificationCenter.default.publisher(for: UIApplication.willTerminateNotification)) { _ in
            if isEnteredBackground {
                // 确认应用是在后台状态被移除,执行对应业务逻辑
                print("应用在后台被用户移除")
            }
        }
    }
}

注意事项:

  • 如果你的应用支持iPad多窗口等多场景特性,建议将监听逻辑放置在对应WindowGroup层级,不要全局监听,避免多场景切换时的状态误判
  • 两种方案都不需要额外桥接UIKit的AppDelegate,可以直接在纯SwiftUI项目中使用。

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:24:02