赞
踩
Application类在每一次开发当中是我们都会遇到的,每一个APP都会有一个Application实例,它拥有和APP一样长的生命周期,Application和APP一起“同生共死”,下面是我对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来进行一些,如:数据传递、数据共享和数据缓存等操作。
onCreate() 方法是 Application 生命周期中的一个重要方法,在创建 Application 时被调用。
在 onCreate() 方法中,通常会进行一些初始化工作,如设置布局、绑定数据、初始化变量等。
Application 中的一个回调方法,用于在应用配置发生变化时被调用。
当应用的配置发生变化时(如语言、主题等),系统会调用 Application 的 onConfigurationChanged() 方法。开发者可以在这个方法中处理应用级别的配置变化,例如重新加载资源、重新初始化组件等。
重写此方法可以监听APP一些配置信息的改变事件(如屏幕旋转等),当配置信息改变的时候会调用这个方法。在Manifest文件下的Activity标签(注意是Activity)里配置android:configChanges属性相应的配置属性,会使Activity在配置改变时候不会重启,只会执行onConfigurationChanged()方法。如:android:configChanges="keyboardHidden|orientation|screenSize"属性可以使Activity旋转时不重启。
onLowMemory() 方法是 Application 中的回调方法,用于在系统内存不足时被调用。
当系统内存不足时,系统会调用该方法,开发者可以在该方法中释放一些不必要的资源,以减少内存占用。
onTerminate() 方法是 Application 中的回调方法,在应用程序终止时被调用。
该方法只用于Android仿真机测试,在Android产品机是不会调用的
这两个方法用于注册或者注销对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()); } });
用于注册和注销ComponentCallbacks2回调接口,里面的方法看名字就知道了。
registerComponentCallbacks(new ComponentCallbacks2() { @Override public void onTrimMemory(int level) { } @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { } @Override public void onLowMemory() { } });
Application 类的生命周期与应用的生命周期密切相关,它的 onCreate() 方法会在应用启动时被调用,可以在这里进行一些初始化操作。但需要注意的是,onCreate() 方法的执行是在应用的主线程中,因此应避免在此方法中执行耗时操作。
在应用的整个生命周期中,只会存在一个 Application 实例,因此可以在其中保存全局的变量和状态,供应用的各个组件共享和访问。
Application 类是整个应用的入口点,它代表了应用的整个生命周期,可以用来管理应用的全局状态和行为。
Application 类可以用来保存应用的全局配置信息,比如主题、语言设置、网络请求配置等,以便应用的各个组件共享和使用。
通过 registerActivityLifecycleCallbacks()、registerComponentCallbacks() 等方法,Application 类可以监听应用级别的事件,如 Activity 的生命周期、系统组件的回调等,以便更好地管理应用的状态。
Application 类可以用来执行一些应用退出时的清理工作,比如释放资源、保存状态等。
Application 类的应用场景和具体实例包括但不限于以下几个方面:
全局变量的管理: 可以在 Application 类中定义全局变量,比如用户信息、网络状态、配置信息等,以便应用的各个组件共享和使用。
应用配置的统一管理: 在 Application 类中可以设置应用的全局配置,比如主题、语言、字体大小等,以确保应用的一致性。
初始化工作: 可以在 Application 类的 onCreate() 方法中进行一些初始化工作,比如初始化网络请求库、数据库、日志系统等。
监听应用级事件: 通过注册 ActivityLifecycleCallbacks、ComponentCallbacks 等回调,可以监听应用级别的事件,比如监控内存使用情况、处理配置变化等。
应用退出时的清理工作: 在 onTerminate() 方法中可以执行一些应用退出时的清理工作,比如释放资源、保存状态等。
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() { // 初始化网络请求库 } }
<application
android:name="MyApplication">
</application>
Android 开发自定义Application
Android Context完全解析,你所不知道的Context的各种细节
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。