一. Application 分析
1. Application 简介
(1) Application 概念
Application 概念 : Application 属于组件范畴; -- 本质 : Application 与 四大组件 一样也属于 Android 中的组件; -- 作用 : 用于存储系统 和 用户定义的全局信息; -- Application 创建 : 应用开始运行时创建 Application 对象, 可以自定义, 也可以让系统自动创建; -- Application 单例性 : 每个应用只创建一个 Application 对象, 该类属于单例模式; -- Application 生命周期 : Application 生命周期 从应用启动开始 到 应用退出结束, 与应用的生命周期是相同的; -- Application 作用 : 在任何组件中调用 getApplication() 或者通过 Context 对象调用 getApplicationContext() 方法获取的 Application 对象都是相同的, 因此可以使用 Application 进行数据共享, 数据缓存操作;
(2) Application 与 全局变量
Application 与 全局变量 : -- 基本作用 : Application 在 Android 中是为了 保存全局变量 而设计的类; -- Android 全局变量定义 : 在 Android 中可以不使用 public static 定义全局变量, 定义在 Application 中的普通变量 在Android应用中可以当作全局变量使用;
(3) Application 使用方法
Application 使用方法 : -- 自定义 Application : 自定义一个 class 类, 继承 android.app.Application 类; -- 配置 Application : 在 AndroidManifest.xml 中配置 Application; -- 获取 Application : 在组件类(Activity, Service 等)中直接调用 getApplication() 方法即可, 在普通类中调用 Context 的 getApplicationContext() 方法;
2. Application 生命周期 及 对应方法
(1) onCreate()
onCreate() 方法简介 : 该方法是 Android 程序的入口; -- 执行时机 : 该方法在应用创建时自动回调; -- 注意 : 在父类 Application 中, onCreate() 方法方法体是空的, 这里可以不用执行 super.onCreate()方法;
关于程序入口 : -- Android 程序入口 : Android 程序入口是 Application, 并不是 Activity, 因为有的 应用是没有 Activity 的; -- Java 和 C 程序入口 : 这两种语言的程序入口是工程中的 main() 函数;
(2) onLowMemory()
onLowMemory() 方法简介 : -- 调用时机 : 在内存不足时会回调该方法; -- 重写方法 : 重写时需要执行父类方法 super.onLowMemory(), 同时根据本应用特点, 释放掉一些不必要的数据;
(3) onTerminate() onTerminate() 方法简介 : -- 调用时机 : 只有在模拟器中终止程序时才会回调该方法, 在 Android 真机中是不会回调该方法的; -- 注意 : Application 的 onTerminate() 方法体是空的, 这里不许要执行父类的方法 super.onTerminate();
(4) onConfigurationChanged()
onConfigurationChanged() 方法简介 :
-- 调用时机 : 配置改变时回调这个方法; (5) Application 代码分析
3. Application 使用场景 1 --> 组件间的数据传递(1) 使用 Application 传递数据Application 媒介传递数据方式 : -- Appliction 集合 : 在 Application 中维护一个集合, 创建一个 HashMap 成员变量, 键是字符串, 值是 Object 对象, 这样 这个 HashMap 可以存储任何类型的对象; -- 共享过程 : Activity A 将数据存储到 HashMap 中, 将 键 通过 Intent 的 Bundle 传递给 Activity B, 之后在 Activity B 中取出对象, 并将 HashMap 中的对象删除; -- 适用范围 : 如果跳转的两个 Activity 在同一个 应用 中, 可以使用这种方法;
(2) 传统传递数据方式
传统数据传递 : Activity A 跳转到 Activity B; -- 实体类 Bean 处理 : bean 实体类必须实现 Serializable或者Parcellable接口, 才可以将实体类 bean 对象放入 Intent 的 Bundle 中; -- 数据传递过程 : 在 Activity A 中将 实现了 Serializable 或者 Parcellable 接口的实体类对象放入 Intent 的 Bundle 中, 跳转到 Activity B;
4. Application 使用场景 2 --> 应用中的数据缓存
Application 缓存数据 : -- 缓存少量数据 : 从互联网获取的少量数据可以直接存放在 Application 中用于数据缓存的 HashMap 中; -- 缓存大量数据 : 如果缓存 数据 或者 文件, 可以将文件缓存到本地, 然后在 Application 中缓存一个 文件路径字符串即可; -- 释放缓存 : 在 onLowMemory() 方法中可以释放这些缓存, 因为这些缓存可有可无, 这里为了性能牺牲访问速度;
|