目录

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. Logos讲解--逆向开发

    前言 Logos是CydiaSubstruct框架中提供的一组宏定义.利于开发者使用宏进行Hook操作,其语法简单,功能是非常强大且稳定. 详细内容logos语法为http://iphonedevwi ...

  2. Java语法进阶12-集合

    集合 集合:是一种容器,用来装对象的容器,不能装基本数据类型. 数组也是容器,可以用来装基本数据类型,也可以用来装对象. 本质上,集合需要用对应的数据结构实现,是多个类实现接口Collection系列 ...

  3. 《Windows内核安全与驱动开发》4.1 文件操作

    <Windows内核安全与驱动开发>阅读笔记 -- 索引目录 <Windows内核安全与驱动开发>4.1 文件操作 从 C:\a.txt 中读取一部分内容并利用 DbgPrin ...

  4. Delphi7 - Server Monitor开发并实现指定端口定时刷新、重启和邮件提醒等功能

    项目背景 近期,总经办邮件反馈考勤数据频繁丢失,请IT排查其根本原因,并提供整改措施. 措不及防,这个项目当初并不是IT主导的,是设备部采购,然后协同软件供应商直接安装.部署和调试的,IT只是提供几个 ...

  5. 重磅!普惠AI--华为云语音语义万次调用1元购,有奖问答@评论区等你来!【华为云技术分享】

    活动快速入口:https://activity.huaweicloud.com/language_speech_promotion0.html 语音交互与自然语言处理 语音交互是一种人机交互方式,以开 ...

  6. 华为担纲建设基础软硬件国家新一代AI开放创新平台

    [摘要] 全栈全场景AI能力爆发! [上海,2019年8月29日] 凭借领先的全栈全场景AI能力华为入选国家新一代人工智能开放创新平台 8月29日,科技部在2019世界人工智能大会宣布,将依托华为建设 ...

  7. WWDC 2016 盛宴

    转自:http://www.jianshu.com/p/72dd8306c817 整理和维护人:pmstGitHub 链接:WWDC-2016-Feast目前只是整理官方给出的 WWDC 2016 视 ...

  8. [TimLinux] Python __hash__ 可哈希集合

    规则: __hash__ 应该返回一个整数,hash()函数计算基础类型的hash值 可哈希集合:set(), forzenset(), dict() 三种数据结构操作要求 key 值唯一,判断唯一的 ...

  9. [TimLinux] django WSGI入口分析及自定义WSGIHandler思路

    1. 命令行启动 命令行是通过runserver子命令来启动的,对应的django模块为django.core.management.commands.runserver,调用关系结构: # 简化的运 ...

  10. WebGPU学习(五): 现代图形API技术要点和WebGPU支持情况调研

    大家好,本文整理了现代图形API的技术要点,重点研究了并行和GPU Driven Render Pipeline相关的知识点,调查了WebGPU的相关支持情况. 另外,本文对实时光线追踪也进行了简要的 ...