Application详解
一、简介
简介:Base class for maintaining global application state.The Application class, or your subclass of the Application class, is instantiated before any other class when the process for your application/package is created.
Application是维护应用全局状态的基类。它的创建早于应用进程的其他任何类。同时application是全局单例的,即只有一个实例且不同组件获取到的application都是同一个。它的生命周期等于应用的生命周期。
二、方法介绍
onCreate
application启动时回调,时机早于activity、service、receiver的oncreate,晚于content providers的oncreate。该方法不可执行耗费时间的任务,因为这样会影响第一个activity、service、receiver的启动。
在该方法内主要完成以下两种操作:
1、初始化 应用程序级别 的资源,如全局对象、环境配置变量、图片资源初始化、推送服务的注册等
注:请不要执行耗时操作,否则会拖慢应用程序启动速度
2、数据共享、数据缓存
设置全局共享数据,如全局共享变量、方法等
注:这些共享数据只在应用程序的生命周期内有效,当该应用程序被杀死,这些数据也会被清空,所以只能存储一些具备 临时性的共享数据
attachBaseContext
该方法是继承自Context类,它回调时机早于onCreate
onConfigurationChanged
当配置发生变化且在manifest中添加了对应的配置,那么会回调该方法
onLowMemory/onTrimMemory
onTrimMemory通知 应用程序 当前内存使用情况(以内存级别进行识别)Android 4.0后提供的一个API
onLowMemory监听Android系统整体内存较低时刻
使用时注意不应该比较值与某个级别是否相等,应该比较值是否大于或等于某个级别。
onTrimMemory()中的TRIM_MEMORY_UI_HIDDEN与onStop()的关系:
onTrimMemory()中的TRIM_MEMORY_UI_HIDDEN的回调时刻:当应用程序中的所有UI组件全部不可见时
Activity的onStop()回调时刻:当一个Activity完全不可见的时候
使用建议:
在 onStop()中释放与 Activity相关的资源,如取消网络连接或者注销广播接收器等
在onTrimMemory()中的TRIM_MEMORY_UI_HIDDEN中释放与UI相关的资源,从而保证用户在使用应用程序过程中,UI相关的资源不需要重新加载,从而提升响应速度
两者关系:
OnTrimMemory()是 OnLowMemory() Android 4.0后的替代 API
OnLowMemory() = OnTrimMemory()中的TRIM_MEMORY_COMPLETE级别
若想兼容Android 4.0前,请使用OnLowMemory();否则直接使用OnTrimMemory()即可
registerActivityLifecycleCallbacks
注册应用程序内 所有Activity的生命周期监听,unregisterActivityLifecycleCallbacks是对应的注销方法。
三、应用
通过 Application 传递数据
假如有一个Activity A, 跳转到 Activity B ,并需要传递一些数据,通常的作法是 Intent.putExtra() 让Intent携带,或者有一个Bundle把信息加入Bundle让Intent传递Bundle对象,实现传递。但这样有一个问题在于,Intent 和 Bundle 所能携带的数据类型都是一些基本的数据类型,如果想实现复杂的数据传递就比较麻烦了,通常需要实现 Serializable 或者 Parcellable 接口。这其实是Android的一种IPC数据传递的方法。如果我们的两个Activity在同一个进程当中为什么还要这么麻烦呢,只要把需要传递的对象的引用传递过去就可以了。
基本思路是:在 Application 中创建一个 HashMap ,以字符串为key,Object为value这样我们的 HashMap 就可以存储任何类型的对象了。在Activity A中把需要传递的对象放入这个HashMap,然后通过 Intent 或者其它途径再把这 key 传递给Activity B ,Activity B 就可以根据这个字符串在 HashMap 中取出这个对象了。只要再向下转型 ,就实现了对象的传递。
四、源码分析
application创建流程分析
long117long的专栏_WizardDragon_CSDN博客-Android开发高手课,《Android开发高手课》自我总结,android领域博主
Android:全面解析 熟悉而陌生 的Application类使用 - 简书