scenePhase 的作用 -- 检测 APP 是否在后台

简介: SwiftUI 提供了一个名为 `scenePhase` 的 环境变量,它在应用程序在前台、后台和非活动状态之间切换时会自动更新。你可以在 App 结构体本身或任何 SwiftUI 视图中观察这些状态的变化。

scenePhase 的作用

>
>

SwiftUI 提供了一个名为 scenePhase 的 环境变量,它在应用程序在前台、后台和非活动状态之间切换时会自动更新。你可以在 App 结构体本身或任何 SwiftUI 视图中观察这些状态的变化。

首先,添加一个属性来追踪这个键:

@Environment(\.scenePhase) var scenePhase

然后,你可以将任何你想要的逻辑添加到你的视图中,或者使用 onChange() 来直接观察变化。

例如,我们可以编写一个视图来监视 scenePhase 并在 Xcode 的调试控制台中打印一些文本,以便在阶段变化时进行观察:

struct ContentView: View {
    
    
   @Environment(\.scenePhase) var scenePhase

   var body: some View {
    
     
       Text("Test")
           .onChange(of: scenePhase) {
    
     newPhase in
               if newPhase == .inactive {
    
    
                   print("非活动")
               } else if newPhase == .active {
    
    
                   print("活动")
               } else if newPhase == .background {
    
    
                   print("后台")
               }
           }
   }
}

2023-08-10 10.44.16

2023-08-10 10.45.24

正如你所见,有三种状态:

  • 活动状态:当你的应用程序在前台且对用户交互时使用,这意味着用户正在使用它。
  • 后台状态:当你的应用程序当前不可见时使用,因此你应该减少工作量。
  • 非活动状态:当你的应用程序可见但用户无法直接交互时使用。例如,如果在运行应用程序时进入多任务模式,你可以在其他应用程序窗口旁边看到你的应用程序窗口,但并未直接使用它。

通过结合 scenePhase 属性和 onChange() 修饰器,你可以响应应用程序状态的变化,并相应地调整其行为。这在管理资源、保存数据或在应用程序转入后台或变得非活动时暂停某些活动方面特别有用。

注意,这段代码应放置在 SwiftUI 视图的 body 属性中。你也可以将此逻辑直接应用于你的 App 结构体,以观察应用程序层级的场景阶段变化。

这种方法为确保应用程序根据其当前的可见性和与用户的互动状态来适当地行事提供了一种简单而有效的方式。

相关文章
|
5月前
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
93 0
|
2月前
|
小程序 API PHP
零成本搭建个人 APP 和小程序后台
虽然网上也有很多人介绍这俩平台的玩法,但都是 2024 年以前的文章,有些平台最新的修改,和自己踩到的坑而别人没提到的细节,我还是想记录一下。
58 9
|
3月前
|
监控 Android开发 开发者
Android经典面试题之实战经验分享:如何简单实现App的前后台监听判断
本文介绍在Android中判断应用前后台状态的两种方法:`ActivityLifecycleCallbacks`和`ProcessLifecycleOwner`。前者提供精细控制,适用于需针对每个Activity处理的场景;后者简化前后台检测,适用于多数应用。两者各有优劣:`ActivityLifecycleCallbacks`更精确但复杂度高;`ProcessLifecycleOwner`更简便但可能在极端场景下略有差异。根据应用需求选择合适方法。
35 2
|
4月前
|
存储 安全 前端开发
APP管理后台OSS技术改造
旨在记录之前使用的上传文件是放在服务器的现在改成了oss更加高效管理
|
5月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
53 0
|
5月前
|
前端开发 Android开发 iOS开发
应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
【2月更文挑战第31天】应用研发平台EMAS使用 aliyun-react-native-push 库接入推送和辅助通道,推送都可以收到,但是在App切到后台或者杀掉进程之后就收不到推送了,是需要配置什么吗?
104 2
|
5月前
|
XML 监控 Java
Android App开发之事件交互Event中检测软键盘和物理按键讲解及实战(附源码 演示简单易懂)
Android App开发之事件交互Event中检测软键盘和物理按键讲解及实战(附源码 演示简单易懂)
656 0
|
小程序
微信小程序和uni.app后台播放
微信小程序和uni.app后台播放
|
Android开发 Kotlin
判断App是否处于后台/前台,使用ActivityLifecycleCallbacks稳得很!
RunningAppProcessInfo.IMPORTANCE_FOREGROUND,或者RunningTask来判断过, 但是遇到过偶然失灵或者无法适配现在的android版本。毕竟太老了,现在用点进去经常会有@Deprecated注解,表示废弃了。