当前位置: 首页 > article >正文

[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>


http://www.kler.cn/a/561161.html

相关文章:

  • 渗透小记--Docker Registry未授权访问
  • java23种设计模式-外观模式
  • 使用Python爬虫获取淘宝商品详情:API返回值说明与案例指南
  • Python游戏编程之赛车游戏6-5
  • 一文讲解Redis中和本地缓存之间的一致性问题及区别等
  • Spring Boot:Java开发的神奇加速器(一)
  • JSON Web Token在登陆中的使用
  • Lua C API :使用 lua_tonumber 函数从 Lua 栈中提取数值
  • 首届国际文化科技与未来创新发展大会:蓝海彤翔CTO穆凯辉出席并签约
  • LeetCode 热题100 104. 二叉树的最大深度
  • 基于 Vue.js 和 Element UI 实现九宫格按钮拖拽排序功能 | 详细教程与代码实现
  • C++:dfs,bfs各两则
  • 【idea问题排查技巧】
  • 算法-数据结构-图-邻接表构建
  • 让Word插上AI的翅膀:如何把DeepSeek装进Word
  • Spring Boot集成Swagger API文档:傻瓜式零基础教程
  • AI写代码工具ScriptEcho:赋能数据分析,驱动精准营销
  • 大数据平台上的机器学习模型部署:从理论到实
  • 【计算机网络】传输层协议(UDP TCP)
  • 网络安全实入门| 剖析HTTP慢速攻击(Slowloris)与Nginx防护配置