目录

 

1.概述

2.Application基类

3.自定义Application类

4.Application的生命周期

5.Application对象的回调函数

6.Application对象的作用

7.静态单列共享数据和Application对象共享数据的对比


1.概述

通过学习Android提供的Application类,了解相关用法,对Application类进行扩展,主要用于维护应用中的全局状态(整个应用中的全局变量),比如qq中昵称在qq整个应用各处都可获取并使用。

2.Application基类

Application和Activity,Service一样是Android框架的一个系统组件,当Android程序启动时系统会创建一个Application对象,是维护应用全局状态的基类,用来存储系统的一些信息。Android系统自动(默认的,不管你有没有定义)会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。如下清单文件mainiftest中的application就是整个基类。

                                                                            

3.自定义Application类

每个应用进程默认启动之后都会创建一个application对象,其他的组件可以通过全局上下文环境访问这个对象,但是application是系统定义的,我们无法修改代码。好在我们可以扩展application类,让Android系统使用我们自定义的Application类创建Application对象。

第一步:自定义类继承Application基类

public class MyApplication extends Application {}

第二步:mainiftest文件中添加name属性

当程序运行时,我们通过查看创建的Application对象,得知是我们自己定义的MyApplication类

4.Application的生命周期

Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。不通的activity互相切换,但是Application对象都是同一个。

5.Application对象的回调函数

Application对象是有Android系统管理,他的回调函数运行于ui线程,也就是主线程,运行过程中主要的回掉方法

public class MyApplication extends Application {    public static  final String TAG ="main-app";    //初始回调方法    @Override    public void onCreate() {        super.onCreate();        Log.d(TAG, "onCreate: "+Thread.currentThread());    }    //系统配置发生变更的时候,比如语言发生变化,屏幕发生切换等,onConfigurationChanged会被调用,    // newConfig是新的配置信息    @Override    public void onConfigurationChanged(@NonNull Configuration newConfig) {        super.onConfigurationChanged(newConfig);        Log.d(TAG, "onConfigurationChanged: "+"newConfig"+newConfig);    }    //app内存低的时候回调    @Override    public void onLowMemory() {        super.onLowMemory();    }}

6.Application对象的作用

因为Application是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。如下,我么在自定义的Application类中定义一个变量,在响应的地方设置,也可以在响应的地方获取

public class MyApplication extends Application {      private String name;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    } }

7.静态单列共享数据和Application对象共享数据的对比

我们定义一个单列类

public class App {    private static App singleton;    private String test;    public static App getInstance(){        return singleton;    }    public String getTest() {          return test;    }    public void setTest(String test) {       this.test = test;    }}

这样我们在应用中也可以通过这个单列类进行数据共享,那么和Application相比较,静态单列模块化更好,Application相当于一个Context所以具有访问资源的能力,但是单列也可以通过接受Context参数进行访问资源,Application的回调和和生命周期完全由Android系统控制,我们无法干预,但是使用单列就更加灵活,推荐使用单列。

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. Activity之间使用intent传递大量数据带来问题总结
  4. iOS开发之初识UITableView
  5. 活用Android线程间通信的Message机制
  6. 查看当前Android版本RemoteViews支持的UI对象
  7. SQLite操作
  8. android: 内容提供器简介
  9. Android(安卓)Activity堆栈信息

随机推荐

  1. 【转】Android的电源管理
  2. Android 启动应用程序方式
  3. 分析脚本文件AndroidInitProcess分析心得
  4. 【转】Android背景选择器Selector详解
  5. [置顶] Android学好Shape不再依赖美工
  6. Android 基础知识
  7. Android从Linux系统启动
  8. 在ListItem某组件添加响应事件
  9. 「Android Tips」解决 Mac OSX 无法识别
  10. Android系统信息获取 之十:移动网络相关信