安卓基础--application详解

目录

  • 前言
  • 一、Application类
    • [1.1 Application类的方法](#1.1 Application类的方法)
      • [1.1.1 onCreate()方法](#1.1.1 onCreate()方法)
      • [1.1.2 onConfigurationChanged(Configuration newConfig)方法](#1.1.2 onConfigurationChanged(Configuration newConfig)方法)
      • [1.1.3 onLowMemory()方法](#1.1.3 onLowMemory()方法)
      • [1.1.4 onTerminate()方法](#1.1.4 onTerminate()方法)
      • [1.1.5 registerActivityLifecycleCallbacks()和unregisterActivityLifecycleCallbacks()方法](#1.1.5 registerActivityLifecycleCallbacks()和unregisterActivityLifecycleCallbacks()方法)
      • [1.1.6 registerComponentCallbacks()和unregisterComponentCallbacks()方法](#1.1.6 registerComponentCallbacks()和unregisterComponentCallbacks()方法)
    • [1.2 Application特点](#1.2 Application特点)
      • 1.2.1应用级别的生命周期
      • [1.2.2 实例创建方式:单例模式](#1.2.2 实例创建方式:单例模式)
      • [1.2.3 全局性](#1.2.3 全局性)
      • [1.2.4 全局配置](#1.2.4 全局配置)
      • [1.2.5 监听应用级事件](#1.2.5 监听应用级事件)
      • [1.2.6 应用退出时的清理工作](#1.2.6 应用退出时的清理工作)
  • 二、应用场景
  • 三、使用示例

前言

Application类在每一次开发当中是我们都会遇到的,每一个APP都会有一个Application实例,它拥有和APP一样长的生命周期,Application和APP一起"同生共死",下面是我对Application的理解阐述。

一、Application类

Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个 Application对象,用来存储系统的一些信息。

Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。

通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。

启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

1.1 Application类的方法

1.1.1 onCreate()方法

onCreate() 方法是 Application 生命周期中的一个重要方法,在创建 Application 时被调用。

在 onCreate() 方法中,通常会进行一些初始化工作,如设置布局、绑定数据、初始化变量等。

1.1.2 onConfigurationChanged(Configuration newConfig)方法

Application 中的一个回调方法,用于在应用配置发生变化时被调用。

当应用的配置发生变化时(如语言、主题等),系统会调用 Application 的 onConfigurationChanged() 方法。开发者可以在这个方法中处理应用级别的配置变化,例如重新加载资源、重新初始化组件等。

重写此方法可以监听APP一些配置信息的改变事件(如屏幕旋转等),当配置信息改变的时候会调用这个方法。在Manifest文件下的Activity标签(注意是Activity)里配置android:configChanges属性相应的配置属性,会使Activity在配置改变时候不会重启,只会执行onConfigurationChanged()方法。如:android:configChanges="keyboardHidden|orientation|screenSize"属性可以使Activity旋转时不重启。

1.1.3 onLowMemory()方法

onLowMemory() 方法是 Application 中的回调方法,用于在系统内存不足时被调用。

当系统内存不足时,系统会调用该方法,开发者可以在该方法中释放一些不必要的资源,以减少内存占用。

1.1.4 onTerminate()方法

onTerminate() 方法是 Application 中的回调方法,在应用程序终止时被调用。

该方法只用于Android仿真机测试,在Android产品机是不会调用的

1.1.5 registerActivityLifecycleCallbacks()和unregisterActivityLifecycleCallbacks()方法

这两个方法用于注册或者注销对APP内所有Activity的生命周期监听,当APP内Activity的生命周期发生变化的时候就会调用ActivityLifecycleCallbacks里面的方法.

java 复制代码
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                Log.e(TAG,"onActivityCreated: " + activity.getLocalClassName());
            }

            @Override
            public void onActivityStarted(Activity activity) {
                Log.e(TAG,"onActivityStarted: " + activity.getLocalClassName());
            }

            @Override
            public void onActivityResumed(Activity activity) {
                Log.e(TAG,"onActivityResumed: " + activity.getLocalClassName());
            }

            @Override
            public void onActivityPaused(Activity activity) {
                Log.e(TAG,"onActivityPaused: " + activity.getLocalClassName());
            }

            @Override
            public void onActivityStopped(Activity activity) {
                Log.e(TAG, "onActivityStopped: " + activity.getLocalClassName());
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                Log.e(TAG,"onActivityDestroyed: " + activity.getLocalClassName());
            }
        });

1.1.6 registerComponentCallbacks()和unregisterComponentCallbacks()方法

用于注册和注销ComponentCallbacks2回调接口,里面的方法看名字就知道了。

java 复制代码
          registerComponentCallbacks(new ComponentCallbacks2() {
              @Override
              public void onTrimMemory(int level) {
                  
              }

              @Override
              public void onConfigurationChanged(@NonNull Configuration newConfig) {
                  
              }

              @Override
              public void onLowMemory() {

              }
          });

1.2 Application特点

1.2.1应用级别的生命周期

Application 类的生命周期与应用的生命周期密切相关,它的 onCreate() 方法会在应用启动时被调用,可以在这里进行一些初始化操作。但需要注意的是,onCreate() 方法的执行是在应用的主线程中,因此应避免在此方法中执行耗时操作。

1.2.2 实例创建方式:单例模式

在应用的整个生命周期中,只会存在一个 Application 实例,因此可以在其中保存全局的变量和状态,供应用的各个组件共享和访问。

1.2.3 全局性

Application 类是整个应用的入口点,它代表了应用的整个生命周期,可以用来管理应用的全局状态和行为。

1.2.4 全局配置

Application 类可以用来保存应用的全局配置信息,比如主题、语言设置、网络请求配置等,以便应用的各个组件共享和使用。

1.2.5 监听应用级事件

通过 registerActivityLifecycleCallbacks()、registerComponentCallbacks() 等方法,Application 类可以监听应用级别的事件,如 Activity 的生命周期、系统组件的回调等,以便更好地管理应用的状态。

1.2.6 应用退出时的清理工作

Application 类可以用来执行一些应用退出时的清理工作,比如释放资源、保存状态等。


二、应用场景

  • Application 类的应用场景和具体实例包括但不限于以下几个方面:

  • 全局变量的管理: 可以在 Application 类中定义全局变量,比如用户信息、网络状态、配置信息等,以便应用的各个组件共享和使用。

  • 应用配置的统一管理: 在 Application 类中可以设置应用的全局配置,比如主题、语言、字体大小等,以确保应用的一致性。

  • 初始化工作: 可以在 Application 类的 onCreate() 方法中进行一些初始化工作,比如初始化网络请求库、数据库、日志系统等。

  • 监听应用级事件: 通过注册 ActivityLifecycleCallbacks、ComponentCallbacks 等回调,可以监听应用级别的事件,比如监控内存使用情况、处理配置变化等。

  • 应用退出时的清理工作: 在 onTerminate() 方法中可以执行一些应用退出时的清理工作,比如释放资源、保存状态等。

三、使用示例

继承Application

java 复制代码
public class MyApplication extends Application {

    private String globalVariable;

    @Override
    public void onCreate() {
        super.onCreate();
        
        // 初始化工作
        initializeNetworkingLibrary();
        
        // 设置全局变量
        globalVariable = "Hello from Application";
    }
    
    public String getGlobalVariable() {
        return globalVariable;
    }
    
    private void initializeNetworkingLibrary() {
        // 初始化网络请求库
    }
}

在ApplicationManifest.xml文件中配置自定义的Application

java 复制代码
<application
       android:name="MyApplication">
</application>
相关推荐
落落落sss13 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
代码敲上天.34 分钟前
数据库语句优化
android·数据库·adb
GEEKVIP3 小时前
手机使用技巧:8 个 Android 锁屏移除工具 [解锁 Android]
android·macos·ios·智能手机·电脑·手机·iphone
model20055 小时前
android + tflite 分类APP开发-2
android·分类·tflite
彭于晏6895 小时前
Android广播
android·java·开发语言
与衫6 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
500了12 小时前
Kotlin基本知识
android·开发语言·kotlin
人工智能的苟富贵13 小时前
Android Debug Bridge(ADB)完全指南
android·adb
小雨cc5566ru18 小时前
uniapp+Android面向网络学习的时间管理工具软件 微信小程序
android·微信小程序·uni-app
bianshaopeng19 小时前
android 原生加载pdf
android·pdf