当前位置:   article > 正文

安卓基础--application详解_安卓 application

安卓 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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() {
        // 初始化网络请求库
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

<application
       android:name="MyApplication">
</application>
  • 1
  • 2
  • 3

四、参考链接

Android 开发自定义Application
Android Context完全解析,你所不知道的Context的各种细节

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/589712
推荐阅读
  

闽ICP备14008679号