[Android]App生命周期

类似iOS的applicationWillEnterForeground:等方法

以下是使用 Application.ActivityLifecycleCallbacks 接口来监听应用启动和进入前台的示例代码。

创建一个自定义的 ActivityLifecycleCallbacks

首先,创建一个实现 Application.ActivityLifecycleCallbacks 的类:

import android.app.Activity
import android.app.Application
import android.content.Intent
import android.os.Bundle
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.mofsaas.www.utils.NSLog

/// APP生命周期
class AppLifecycleCallbacks : Application.ActivityLifecycleCallbacks {

    private var activityReferences = 0
    private var isActivityChangingConfigurations = false

    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        // 可选:在 Activity 创建时执行任务
    }

    override fun onActivityStarted(activity: Activity) {
        if (++activityReferences == 1 && !isActivityChangingConfigurations) {
            // 应用进入前台
            NSLog("应用进入前台, App has entered the foreground")
            handleAppOpened()
            // 发送广播通知
            val intent = Intent("com.example.ACTION_APP_OPENED")
            LocalBroadcastManager.getInstance(activity).sendBroadcast(intent)
        }
    }

    override fun onActivityResumed(activity: Activity) {
        // 可选:在 Activity 恢复时执行任务
    }

    override fun onActivityPaused(activity: Activity) {
        // 可选:在 Activity 暂停时执行任务
    }

    override fun onActivityStopped(activity: Activity) {
        isActivityChangingConfigurations = activity.isChangingConfigurations
        if (--activityReferences == 0 && !isActivityChangingConfigurations) {
            // 应用进入后台
            NSLog("应用进入后台, App has entered the background")
        }
    }

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
        // 可选:在保存 Activity 状态时执行任务
    }

    override fun onActivityDestroyed(activity: Activity) {
        // 可选:在 Activity 销毁时执行任务
    }

    private fun handleAppOpened() {
        // 要处理的任务
        NSLog("要处理的任务, Handling app opened tasks")
        checkForUpdates()
        refreshUserData()
    }

    private fun checkForUpdates() {
        // 检查应用更新的逻辑
        NSLog("检查应用更新的逻辑, Checking for updates...")
    }

    private fun refreshUserData() {
        // 刷新用户数据的逻辑
        NSLog("刷新用户数据的逻辑, Refreshing user data...")
    }
}

在 Application 类中注册 ActivityLifecycleCallbacks

接下来,在自定义的 Application 类中注册这个 ActivityLifecycleCallbacks:

import android.app.Application

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()

        // 注册 ActivityLifecycleCallbacks
        registerActivityLifecycleCallbacks(AppLifecycleCallbacks())
    }
}

在 AndroidManifest.xml 中指定自定义 Application 类

确保在 AndroidManifest.xml 中指定你的自定义 Application 类:

<application
    android:name=".MyApp"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    
    <!-- 其他标签 -->

</application>