Android Application

Android类代表应用程序(即Android APP)的类,属于Android中的一个系统组件。

操作流程

1. 配置

Android的Application类是为了保存全变量设计的基本类,可在AndroidManifest.xml应用清单文件的<application>标签的android:name属性中进行配置,当application应用或package包被建立将引用对应的Application类。

$ vim AndroidManifest.xml
<application
        android:name=".MainApplication"
        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/Theme.AppCompat.Light.NoActionBar">
</application>

Application类继承自ContextWrapper类, 每个Android APP运行时首先会自动创建Application类并实例化Application对象,有且只有一个,也就是说Application类是单例模式类(singleton)。

java.lang.Object
  android.content.Context
    android.content.ContextWrapper
      android.app.Application

当创建全部变量时无需像J2SE那样创建public权限的static变量,直接在application中去实现。只需调用ContextgetApplicationContextActivitygetApplication方法来获取application对象,再做相应的处理。

android.app.Application类包含4个公开的方法,Application的生命周期等同于Android APP的生命周期。

  • void onConfigurationChanged(Configuration newConfig) 配置改变时触发
  • void onCreate() 真正的入口点,创建应用程序时触发。
  • void onLowMemory()当后台程序已经终止资源但还匮乏时触发
  • void onTerminate()当终止应用程序时触发,不保证一定被调用。

2. 创建

可以通过继承Application类自定义Application类和实例,Application的实例形式为全局实例,即不同的组件(如ActivityService)都可以获得Application对象且都是同一个对象。

$ vim MainApplication.java
package com.jc.demo;

import android.app.Application;

public class MainApplication extends Application {
    private int curIndex;
    public int getCurIndex() {
        return curIndex;
    }
    public void setCurIndex(int curIndex) {
        this.curIndex = curIndex;
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
    }
}

3.使用

使用自定义的Application类实例

private MainApplication app;
// 获取Application对象
app = (MainApplication) getApplication();
// 退出APP
app.exit.App();

当启动Application时系统会创建一个进程ID,所有的Activity都会在次进程上运行。在Application创建时初始化全局变量,同一个应用的所有Activity都可以获取到这些全局变量的值。换句话说,当在某个Activity中修改了全局变量的值,相同应用中其他Activity中的值也会改变。

适用场景

  • 初始化应用程序级别的资源,如全局对象、环境配置变量等。
  • 数据共享、数据缓存,如设置全局共享变量、方法等。
  • 获取应用程序当前的内存使用情况,及时释放资源,从而避免被系统杀死。
  • 监听应用程序配置信息的改变,如屏幕旋转等。
  • 监听应用程序内所有Activity的生命周期

成员方法

onCreate()

  • Android系统的入口是Application类的onCreate()方法,默认为空实现。
  • onCreate()方法会在Application实例创建时调用

onCreate()方法的作用

  • 初始化应用程序级别的资源,如全局对象、环境配置变量、图片资源初始化、推送服务的注册等。
    不要在onCreate()方法中执行耗时操作,否则会拖慢应用程序的启动速度。
  • 数据共享、数据缓存:设置全局共享数据,如全局共享变量、方法等。
    共享数据只在应用程序的生命周期内有效,当应用程序被杀死时共享数据会被清空。因此推荐存储一些具备临时性的共享数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值