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

如何订阅应用程序状态切换事件以响应用户操作?

监听应用状态变更的实现方案

分Android和iOS两个平台给你讲具体的订阅方法,都是日常开发里最常用的方案:

Android 平台

1. 监听应用切出/切回

  • 全局应用级监听:用ProcessLifecycleOwner(属于Jetpack Lifecycle组件),能监听整个应用的前后台状态,不用在每个Activity里重复写逻辑:
    // 在Application类里初始化
    ProcessLifecycleOwner.get().lifecycle.addObserver(object : LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        fun onAppBackgrounded() {
            // 应用被切到后台(切换至其他应用)
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        fun onAppForegrounded() {
            // 应用回到前台(返回本应用)
        }
    })
    
  • 单Activity级监听:如果只需要监听某个页面的切出/切回,直接重写Activity的生命周期方法:
    override fun onPause() {
        super.onPause()
        // 当前Activity被切到后台(可能是切应用,也可能是跳转到其他Activity)
    }
    
    override fun onResume() {
        super.onResume()
        // 当前Activity回到前台
    }
    

2. 监听应用关闭尝试

  • 用户按返回键关闭:重写Activity的onBackPressed(或用OnBackPressedDispatcher):
    override fun onBackPressed() {
        // 用户尝试按返回键关闭页面/应用
        // 这里可以做拦截或处理逻辑
        super.onBackPressed() // 注释掉这行可以阻止关闭
    }
    
  • 应用被销毁(包括最近任务栏划掉):用ProcessLifecycleOwner的ON_DESTROY事件,或者重写Application的onTerminate(注意:onTerminate在真实设备上不一定会被调用,因为系统可能直接杀进程):
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun onAppDestroyed() {
        // 应用即将被销毁
    }
    

iOS 平台

1. 监听应用切出/切回

通过UIApplication的通知来订阅状态变更,在ViewController或AppDelegate里注册:

// 在viewDidLoad里注册通知
override func viewDidLoad() {
    super.viewDidLoad()
    // 监听应用即将进入后台(切至其他应用)
    NotificationCenter.default.addObserver(self, selector: #selector(appWillResignActive), name: UIApplication.willResignActiveNotification, object: nil)
    // 监听应用回到前台(返回本应用)
    NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
}

// 回调方法
@objc func appWillResignActive() {
    // 应用被切到后台
}

@objc func appDidBecomeActive() {
    // 应用回到前台
}

// 别忘了在deinit里移除观察者
deinit {
    NotificationCenter.default.removeObserver(self)
}

2. 监听应用关闭尝试

  • 用户主动关闭应用:在AppDelegate(或SceneDelegate,针对多场景应用)里实现对应方法:
    // AppDelegate
    func applicationWillTerminate(_ application: UIApplication) {
        // 应用即将被终止(用户主动关闭)
        // 这里可以做清理或保存逻辑
    }
    
    // 如果用SceneDelegate
    func sceneWillTerminate(_ scene: UIScene) {
        // 当前场景即将被终止
    }
    
  • 注意:iOS中如果应用进入后台后被系统内存不足杀死,applicationWillTerminate不会被调用,这种情况只能在applicationDidEnterBackground里提前做好状态保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:51:09