首页 > 其他分享 >Android开发 - Application 基础类全局的应用级状态管理解析

Android开发 - Application 基础类全局的应用级状态管理解析

时间:2024-08-27 17:04:10浏览次数:10  
标签:初始化 解析 全局 globalData Application Android onCreate public

Application 是什么

  • Application 是一个基础类,用于全局应用级状态管理。它在应用程序启动时创建,并在应用程序关闭时销毁Application 对象的生命周期与应用程序的生命周期一致,因此它非常适合用来保存全局的应用状态信息初始化全局资源

Application 的主要作用

全局状态管理

  • Application 类可以用来存储全局的应用状态和数据。例如,可以在 Application 类保存一些在整个应用生命周期内都需要数据或对象

全局配置和初始化

  • 可以在 Application 类onCreate() 方法中进行一些全局的初始化操作,如设置第三方 SDK初始化全局变量配置日志工具

单例模式的替代

  • 由于 Application 对象全局唯一的,许多时候它可以替代单例模式,用来保存一些全局共享资源和对象

共享资源和数据

  • Application 类可以用来存储和管理一些需要在不同组件(如 Activity、Service)之间共享资源和数据

Application 类的使用示例

  • 自定义 Application 类:要使用 Application 类,首先需要创建一个自定义的 Application 类,并在其中重写 onCreate() 方法来进行初始化操作。然后,在 AndroidManifest.xml 文件声明这个自定义的 Application 类

    // 导入必要的包
    import android.app.Application; // 引入 Android 应用程序类的基本包
    
    // 自定义的 Application 类,继承自 Android 的 Application 基类
    public class MyApplication extends Application {
    
        // 定义一个全局的字符串变量,保存应用级别的数据
        // 这个变量是应用级别的全局数据,可以在整个应用程序的生命周期内访问和修改
        private String globalData;
    
        // 这是 Application 类的生命周期方法,在应用程序启动时调用一次
        @Override
        public void onCreate() {
            super.onCreate(); // 调用父类的 onCreate 方法,确保父类的初始化逻辑被执行
    
            // 在应用启动时进行初始化操作,可以在这里设置全局状态、初始化第三方库等
            // 可以在这个位置初始化任何需要在应用程序启动时初始化的全局配置或第三方库
            globalData = "应用启动时初始化的数据";
            // 例如,初始化第三方库
            // initSomeLibrary(); // 可以在这里调用初始化第三方库的方法。例如,如果你使用某个第三方分析库,可以在这里进行初始化
        }
    
        // 提供一个public(公共)方法来获取全局数据,其他组件(如 Activity 或 Service)可以通过调用这个方法返回当前的 globalData 值
        // 这个方法可以让应用程序的其他部分(例如,Activity 或 Service)访问 globalData
        public String getGlobalData() {
            return globalData;	// 返回 globalData 的当前值
        }
    
        // 提供一个public(公共)方法来设置 globalData 的值,其他组件可以通过调用这个方法来更新全局数据
        public void setGlobalData(String globalData) {
            this.globalData = globalData;	// 将传入的参数 globalData 赋值给类的成员变量 globalData。this 关键字用于区分成员变量和参数变量
        }
    }
    
  • 声明自定义的 Application 类:在 AndroidManifest.xml声明自定义的 Application 类

    <application
        android:name=".MyApplication"  <!-- 指定自定义的 Application 类 -->
        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>
    

Application 类的常见用法

全局变量和数据存储

  • Application 类存储应用级别全局数据,以便在整个应用程序中访问和修改

    // 自定义的 Application 类
    public class MyApplication extends Application {
    
        // 定义一个私有的全局的字符串变量
        private String globalData;
    
        // 重写 onCreate() 方法,这个方法在应用启动时调用
        @Override
        public void onCreate() {
            super.onCreate(); // 调用父类的 onCreate 方法,确保父类初始化逻辑被执行
            globalData = "初始化数据"; // 设置全局数据的初始值
        }
    
        // 获取全局数据的方法
        public String getGlobalData() {
            return globalData;
        }
    
        // 设置全局数据的方法
        public void setGlobalData(String globalData) {
            this.globalData = globalData;
        }
    }
    

初始化第三方库

  • 在应用程序启动时初始化第三方库或 SDK,例如分析工具广告 SDK

    // 自定义的 Application 类
    public class MyApplication extends Application {
    
        // 重写 onCreate() 方法,应用启动时调用
        @Override
        public void onCreate() {
            super.onCreate(); // 调用父类的 onCreate 方法
    
            // 初始化第三方库
            initThirdPartyLibrary();
        }
    
        // 初始化第三方库的方法
        private void initThirdPartyLibrary() {
            // 示例代码:初始化第三方分析 SDK
            // AnalyticsLibrary.initialize(this);
            // 具体初始化代码取决于第三方库的要求
        }
    }
    

全局异常处理

  • 设置全局异常处理器,用于捕获未处理的异常避免应用崩溃收集错误日志

    // 自定义的 Application 类
    public class MyApplication extends Application {
    
        // 重写 onCreate() 方法,应用启动时调用
        @Override
        public void onCreate() {
            super.onCreate(); // 调用父类的 onCreate 方法
    
            // 设置全局未捕获异常处理器
            Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
                @Override
                public void uncaughtException(Thread thread, Throwable e) {
                    // 处理未捕获的异常
                    // 例如,记录日志、显示错误页面等
                    // Log.e("MyApplication", "Uncaught exception", e);
                }
            });
        }
    }
    

应用生命周期管理

  • 监控应用的前后台状态,进行相应的处理,例如统计应用的使用时间

    // 自定义的 Application 类
    public class MyApplication extends Application {
    
        // 声明一个私有布尔变量,表示应用是否在后台
        private boolean isAppInBackground = false;
    
        // 重写 onCreate() 方法,应用启动时调用
        @Override
        public void onCreate() {
            super.onCreate(); // 调用父类的 onCreate 方法
    
            // 注册 Activity 生命周期回调来检测应用的前后台状态, 监听活动的生命周期事件
            registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                
                // 实现 onActivityResumed 方法,应用从后台恢复到前台时调用
                @Override
                public void onActivityResumed(Activity activity) {
                    // 应用从后台恢复到前台: 设置应用状态为前台
                    isAppInBackground = false;
                }
    
                // 实现 onActivityPaused 方法,应用从前台进入后台时调用
                @Override
                public void onActivityPaused(Activity activity) {
                    // 应用从前台进入后台: 设置应用状态为后台
                    isAppInBackground = true;
                }
    
                // 其他生命周期方法可以忽略
    
                @Override
                public void onActivityCreated(Activity activity, Bundle savedInstanceState) {}
                @Override
                public void onActivityStarted(Activity activity) {}
                @Override
                public void onActivityStopped(Activity activity) {}
                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle outState) {}
            });
        }
    
        // 提供一个公共方法来获取应用是否在后台的状态
        public boolean isAppInBackground() {
            // 返回当前应用是否在后台的状态
            return isAppInBackground;
        }
    }
    

总结

  • Application入口类全局唯一整个应用生命周期内存在

  • 适合存储全局状态信息进行全局初始化管理共享资源

  • 通过自定义 Application 类,可以实现更复杂应用逻辑和全局管理

标签:初始化,解析,全局,globalData,Application,Android,onCreate,public
From: https://www.cnblogs.com/ajunjava/p/18383140

相关文章

  • 声明式开发(N个中间件硬解析)
    我刚入行的时候,就看到第一篇文章概述里那种描述,就觉得编程好难啊,要学那么多东西.光是技术的名字都那么一长串,b站上看那些大佬跟相声说贯口似的说着那些技术名字.要理解各种中间件,第一步,我们得破除一个恐惧,就是技术那么多,怎么学得完的恐惧.怎么破.我的角度是一个词: ......
  • mac强大的安卓文件传输工具:Android File Transfer for mac 版
    AndroidFileTransfer是一款专为Mac用户设计的文件传输工具,旨在简化Mac与Android设备之间的文件传输与管理过程。以下是该软件的详细介绍:一、基本功能文件传输:AndroidFileTransfer支持通过USB连接,快速、稳定地在Mac与Android设备之间传输文件。无论是照片、音乐、视......
  • Android Qcom USB Driver学习(十)
    本章主要是基于之前的学习,实现一个hidraw的驱动,发现有两种用于识别usb设备的方式,放别是usb_device_id和hid_device_idhid_probe(1)hid_device_idkernel/msm-4.19/drivers/hid/usbhid/hid-core.cbus=usbusb_register注册驱动->sys/bus/usb/driver↓↓↓↓↓↓......
  • 深度解析:视频监控系统部署前的技术选型与需求分析
    视频监控系统在日常生活与企业运营中扮演着至关重要的角色,广泛应用于办公室、工地、写字楼、库房及工厂等场所。为确保系统部署的精准与高效,以下是在选型评估前必须掌握的几项关键信息:一、摄像头布局与数量数量规划:基于监控区域的具体需求,结合建筑物图纸或现场勘查,初步确定摄像......
  • Android开发 - synchronized 关键字控制多个线程对共享资源的访问解析
    什么是synchronizedsynchronized一个关键字,用于实现线程同步。其主要作用是控制多个线程对共享资源的访问,确保被synchronized修饰的代码块或方法同一时间只有一个线程可以执行,从而避免数据不一致的问题为什么需要synchronized在多线程编程中,多个线程可能同时访问和修改......
  • Android Qcom USB Driver学习(九)
    本章主要是基于之前的学习,实现一个hidraw的驱动,发现有两种用于识别usb设备的方式,放别是usb_device_id和hid_device_idhid_probe(1)hid_device_idkernel/msm-4.19/drivers/hid/usbhid/hid-core.cbus=usbusb_register注册驱动->sys/bus/usb/driver↓↓↓↓↓↓......
  • Android taskset用法详解
    一、简介taskset命令用于设置或者获取一直指定的 PID 对于CPU核的运行依赖关系。通过taskset命令可将某个进程与某个CPU核心绑定,使得其仅在与之绑定的CPU核心上运行关于绑核的解释绑核,其实就是设定某个进程/线程与某个CPU核的亲和力(affinity)。设定以后,Linux调......
  • Android systrace环境的搭建和使用
    一、systrace简介Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android 关键子系统(如SurfaceFlinger/SystemServer/Kernel/Input/Display等Framework部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。S......
  • 大模型深度解析:全面了解与精通的必备知识,一篇涵盖所有要点
    大模型的定义大模型是指具有数千万甚至数亿参数的深度学习模型。近年来,随着计算机技术和大数据的快速发展,深度学习在各个领域取得了显著的成果,如自然语言处理,图片生成,工业数字化等。为了提高模型的性能,研究者们不断尝试增加模型的参数数量,从而诞生了大模型这一概念。大模......
  • 数字人直播怎么做?完整操作步骤解析,学了就能用!
    随着数字人直播技术的成熟,数字人主播的出镜频率开始以肉眼可见的速度持续增长,不少人也因此对数字人直播本身产生了浓厚的兴趣,以数字人直播怎么做为代表的相关话题更是成为相关创业者和技术爱好者社群中的重点讨论对象。而从目前数字人直播系统的使用情况来看,撇开晦涩难懂的专......