Android——application全局类的使用
目录
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系统控制,我们无法干预,但是使用单列就更加灵活,推荐使用单列。
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- Activity之间使用intent传递大量数据带来问题总结
- iOS开发之初识UITableView
- 活用Android线程间通信的Message机制
- 查看当前Android版本RemoteViews支持的UI对象
- SQLite操作
- android: 内容提供器简介
- Android(安卓)Activity堆栈信息