基本概念
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来进行一些,如:数据传递、数据共享和数据缓存等操作。
生命周期
Application 对象的生命周期是整个程序中最长的,即等于Android App的生命周期。
方法介绍
onCreate()
Application 实例创建时调用,Android系统的入口是Application类的 onCreate(),默认为空实现,初始化 应用程序级别 的资源,如全局对象、环境配置变量、图片资源初始化、推送服务的注册等。注意不要执行耗时操作,否则会影响应用的启动速度。
registerComponentCallbacks() & unregisterComponentCallbacks()
注册和注销 ComponentCallbacks2回调接口
registerComponentCallbacks(new ComponentCallbacks2() {
// 接口里方法下面会继续介绍
@Override
public void onTrimMemory(int level) {
}
@Override
public void onLowMemory() {
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
}
});
onTrimMemory()
通知 应用程序 当前内存使用情况(以内存级别进行识别)根据当前内存使用情况进行自身的内存资源的不同程度释放,以避免被系统直接杀掉 & 优化应用程序的性能体验
registerComponentCallbacks(new ComponentCallbacks2() {
@Override
public void onTrimMemory(int level) {
// Android系统会根据当前内存使用的情况,传入对应的级别
// 下面以清除缓存为例子介绍
super.onTrimMemory(level);
. if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
mPendingRequests.clear();
mBitmapHolderCache.evictAll();
mBitmapCache.evictAll();
}
});
onLowMemory()
监听 Android系统整体内存较低时刻,OnTrimMemory() & OnLowMemory() 关系
1,OnTrimMemory()是 OnLowMemory() Android 4.0后的替代 API;
2,OnLowMemory() = OnTrimMemory()中的TRIM_MEMORY_COMPLETE级别;
3,若想兼容Android 4.0前,请使用OnLowMemory();否则直接使用OnTrimMemory()即可
onConfigurationChanged()
监听 应用程序 配置信息的改变,如屏幕旋转等
registerActivityLifecycleCallbacks() & unregisterActivityLifecycleCallbacks()
注册 / 注销对 应用程序内 所有Activity的生命周期监听
//声明一个监听Activity们生命周期的接口
private ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
/**
* application下的每个Activity声明周期改变时,都会触发以下的函数。
*/
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
Log.d(TAG, "onActivityStarted.");
}
@Override
public void onActivityResumed(Activity activity) {
Log.d(TAG, "onActivityResumed.");
}
@Override
public void onActivityPaused(Activity activity) {
Log.d(TAG, "onActivityPaused.");
}
@Override
public void onActivityStopped(Activity activity) {
Log.d(TAG, "onActivityStopped.");
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.d(TAG, "onActivityDestroyed.");
}
};
onTerminate()
应用程序结束时调用
应用场景
1, 初始化 应用程序级别 的资源,如全局对象、环境配置变量等
2,数据共享、数据缓存,如设置全局共享变量、方法等
3,获取应用程序当前的内存使用情况,及时释放资源,从而避免被系统杀死
4,监听 应用程序 配置信息的改变,如屏幕旋转等
5,监听应用程序内 所有Activity的生命周期
特别注意
使用Application如果保存了一些不该保存的对象很容易导致内存泄漏。