目录

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就是整个基类。

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </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系统控制,我们无法干预,但是使用单列就更加灵活,推荐使用单列。

 

Android——application全局类的使用的更多相关文章

  1. android application简要类(一)

    每次应用程序执行.应用application保持实例化的阶级地位.推而广之applicaiton类别,能够完成以下3长期工作: 1.至android应用级事件,如广播的实现中低声回应. 2.传递应用程 ...

  2. android application类的用法

    android application类的用法 Application是android系统Framework提供的一个组件,它是单例模式(singleton),即每个应用只有一个实例,用来存储系统的一 ...

  3. android Application类的详细介绍(转)

    在代码中经常看到application这个类,一直不知道这个是干什么用的,今天刚好有点时间,所以进行了详细的学习. 一.先对它的整体概念解释: 在android源码中对他的描述是; * Base cl ...

  4. 关于TornadoFx和Android的全局配置工具类封装实现及思路解析

    原文地址: 关于TornadoFx和Android的全局配置工具类封装实现及思路解析 - Stars-One的杂货小窝 目前个人开发软件存在设置页面,可以让用户自定义些设置,但我发现,存储数据的代码逻 ...

  5. Android Application Fundamentals——Android应用程序基础知识

    Application Fundamentals--应用程序基础知识 Key classes--关键类 Activity Service BroadcastReceiver ContentProvid ...

  6. android中全局异常捕捉

    android中全局异常捕捉 只要写代码就会有bug,但是我们要想办法收集到客户的bug.有第三方bugly或者友盟等可以收集.但是,android原生就提供了有关收集异常的api,所以我们来学习一下 ...

  7. Android捕获全局异常

    Android捕获全局异常 程序避免不了出现bug,导致程序崩溃,为了尽量不影响用户体验,可以全局捕获异常 效果图 异常捕获处理前 异常捕获处理后(将程序重新启动) 捕获异常的工具类 package ...

  8. Android基础工具类重构系列一Toast

    前言: 一直在考虑写一下Android实际项目中的一些总结,翻看CSDN博客,上一篇已经是一年多曾经. 本系列定位Android基础工具类重构.旨在记录实际项目中经经常使用到的一些工具类,比方Toas ...

  9. Android开发——Context类的各种细节问题

    0. 前言   Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了.但实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学习一下那些你所不知道的细节. ...

随机推荐

  1. Python Kite 使用教程 轻量级代码提示

    1: 概述 今天升级annacoda 插件 spyder  (4.0.0 )的时候 提示安装kite ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发 ...

  2. RestTemplate 中文乱码

    @Configuration public class RestTemplateWithoutLoadBalance { @Bean("normalRestTemplate") p ...

  3. react-native 信鸽推送集成

    目录 一. git链接: react-native-xinge-push 1.1 安装 1.2. link 二. android配置 2.1. android/settings.gradle 2.2. ...

  4. 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)

    必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...

  5. OV7670 RAW输出 bayer 解码

    今天终于搞定OV7670 raw输出啦,兴奋!! 参考链接: https://pikacode.com/liplianin/s2-liplianin/commit/dab97f5d6e3b http: ...

  6. 重新精读《Java 编程思想》系列之组合与继承

    Java 复用代码的两种方式组合与继承. 组合 组合只需将对象引用置于新类中即可. 比如我们有一个B类,它具有一个say方法,我们在A类中使用B类的方法,就是组合. public class B { ...

  7. 如何在Tomcat服务器配置CGI运行Python

    想通过请求触发部署在tomcat上的非java应用程序,需要用到Common Gateway Interface(CGI).Tomcat提供了Servlet CGI支持. 修改web.xml web. ...

  8. oracle管理角色和权限

    介绍 这一部分主要看看oracle中如何管理权限和角色,权限和角色的区别在哪里. 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必需为其授予系统的权限:如果 ...

  9. typeof 与 instanceof之间的区别

    JS中会使用typeof 和 instanceof来判断一个变量是否为空或者是什么类型的. ES6规范中有7种数据类型,分别是基本类型和引用类型两大类 基本类型(简单类型.原始类型):String.N ...

  10. GTC 2019参会整理

    NVIDIA GTC 2019在苏州金湖国际会议中心举行,由于同事有其他会议冲突,所以我代替他来参加了此次会议.作为刚接触GPU和机器学习不久的新人来说,感觉进入了一个新世界,深刻体验到技术的革新迭代 ...