安卓基础--application详解

小明 2025-05-05 14:36:16 7

目录

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

              前言

              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里面的方法.

              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回调接口,里面的方法看名字就知道了。

                        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

                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

                
                
The End
微信