Android——application全局类的使用

目录html

 

1.概述android

2.Application基类缓存

3.自定义Application类app

4.Application的生命周期框架

5.Application对象的回调函数ide

6.Application对象的做用模块化

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


1.概述

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

2.Application基类

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

<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系统控制,咱们没法干预,可是使用单列就更加灵活,推荐使用单列。

相关文章
相关标签/搜索