Application详解

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类使用 - 简书

理解Application创建过程 - Gityuan博客 | 袁辉辉的技术博客

posted @ 2020-10-13 11:55  Robin132929  阅读(103)  评论(0编辑  收藏