首页 > 其他分享 >Android——application全局类的使用

Android——application全局类的使用

时间:2022-10-09 20:33:52浏览次数:57  
标签:全局 Application 对象 application String Android public name


目录

 

​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属性

Android——application全局类的使用_android

当程序运行时,我们通过查看创建的Application对象,得知是我们自己定义的MyApplication类

Android——application全局类的使用_android_02

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

标签:全局,Application,对象,application,String,Android,public,name
From: https://blog.51cto.com/u_11334685/5741396

相关文章

  • Android日志的过滤方法
    Android应用启动之后,有时候根据项目需要,我们只需要指定的日志,过滤掉多余的日志,方式如下......
  • Android RecyclerView的ItemAnimator (item的刷新动画)
    前言notifyItemChanged()在更新的时候会执行ItemAnimator动画,默认是闪烁的动画,此动画可以自定义。取消默认闪烁动画valanimator=mBinding.applyList.it......
  • android download hosts 域名解析
    203.208.40.97dl.google.com203.208.40.33dl.l.google.com74.125.137.91dl-ssl.google.com......
  • Android dialog使用案例
    需求:应用锁,//自定义dialog的显示viewViewview=getLayoutInflater().inflate(R.layout.passwd_dialog_view,null);finalEditTexteditText=(EditText)view.findV......
  • 报错:禁用了全局ipv6转发,但当前在内核中未禁用
    报错ERROR:[/etc/sysconfig/network-scripts/ifup-ipv6]GlobalIPv6forwardingisdisabledinconfiguration,butnotcurrentlydisabledinkernelERROR......
  • static与全局变量
    一、普通全局变量普通的全局变量也称外部变量,在一个程序工程中,全局变量是整个工程都可见的,也就是说只需要在工程内的某一个文件内定义全局变量一次,在其他文件内都是可......
  • appliction.properties 和 application.yml 优先级问题
     springboot 首先配置文件是都要读的,这两个配置文件,并且不相同的合并,相同的做覆盖。两个配制文件先读 yml文件,再读properties文件。 也就是说如果配置相同的配置内容,比......
  • Android开发 Jetpack compose 配置开发环境
    前言 JetpackCompose是用于构建原生Android界面的新工具包。它可简化并加快Android上的界面开发,使用更少的代码、强大的工具和直观的KotlinAPI,快速打造生动......
  • proxy_cfw全局代理_浏览器代理配置(chromium based(edge)/firefox/IDM)
    文章目录​​无须sstap等软件实现虚拟网卡代理​​​​reference​​​​配置步骤​​​​serviceMode​​​​tunMode​​​​检查启用情况​​​​edge浏览器内部代理......
  • 全局平衡二叉树
    全局平衡二叉树,其实说白了就是在树链剖分的基础上再次对每条链以相对平衡的方法再次重构成一颗固态的二叉树的形态,或者说在LCT的基础上把Splay换成满足全局平衡的二叉......