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

Android Kotlin中如何监听应用变为活跃状态?附iOS Swift实现示例

Android Kotlin 监听应用变为活跃状态的实现方式

在Android Kotlin中,你可以通过以下几种常用方式实现应用活跃状态的监听,对应iOS中UIApplication.willResignActiveNotification/活跃状态的监听需求:

方法一:使用 ProcessLifecycleOwner + LifecycleObserver(推荐全局监听)

这是Google推荐的全局监听应用生命周期的方式,无需依赖单个Activity,适合在任意类中监听应用前后台状态。

  1. 定义生命周期观察者类
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner

class AppActiveObserver : DefaultLifecycleObserver {
    // 应用进入前台、变为活跃状态时触发
    override fun onResume(owner: LifecycleOwner) {
        super.onResume(owner)
        println("App become active")
    }

    // 可选:监听应用进入后台的状态
    override fun onPause(owner: LifecycleOwner) {
        super.onPause(owner)
        println("App resign active")
    }
}
  1. 在Application类中注册观察者
import androidx.lifecycle.ProcessLifecycleOwner
import android.app.Application

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        // 注册全局应用生命周期观察者
        ProcessLifecycleOwner.get().lifecycle.addObserver(AppActiveObserver())
    }
}

别忘了在AndroidManifest.xml中配置自定义Application:

<application
    android:name=".MyApp"
    ...>
    <!-- 其他配置 -->
</application>

方法二:通过Activity生命周期方法(页面级监听)

如果只需要在特定Activity中监听活跃状态,直接重写onResume方法即可:

import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onResume() {
        super.onResume()
        // 当前Activity恢复可见,应用处于活跃状态
        println("App become active (from MainActivity)")
    }
}

方法三:使用 Application.ActivityLifecycleCallbacks(精细全局监听)

这种方式可以监听所有Activity的生命周期,通过统计活跃Activity数量来精准判断应用是否进入活跃状态:

import android.app.Activity
import android.app.Application
import android.os.Bundle

class MyApp : Application() {
    private var activeActivityCount = 0

    override fun onCreate() {
        super.onCreate()
        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            override fun onActivityResumed(activity: Activity) {
                activeActivityCount++
                // 当第一个Activity恢复时,说明应用从后台回到前台
                if (activeActivityCount == 1) {
                    println("App become active")
                }
            }

            override fun onActivityPaused(activity: Activity) {
                activeActivityCount--
                // 当最后一个Activity暂停时,说明应用进入后台
                if (activeActivityCount == 0) {
                    println("App resign active")
                }
            }

            // 其他生命周期方法可留空实现
            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
            override fun onActivityStarted(activity: Activity) {}
            override fun onActivityStopped(activity: Activity) {}
            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
            override fun onActivityDestroyed(activity: Activity) {}
        })
    }
}

三种方式的适用场景

  • ProcessLifecycleOwner:最简洁的全局监听方案,适合大多数普通场景
  • Activity生命周期方法:仅需在单个页面监听活跃状态时使用
  • ActivityLifecycleCallbacks:需要精细控制活跃状态判断逻辑(如多页面切换的特殊处理)时使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:06