当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发之Application的使用分析

Android开发之Application的使用分析

2018年11月04日  | 移动技术网移动技术  | 我要评论

application是维护全局状态的基类,android会在启动应用进程时创建一个application对象。application里面的对象变量是属于整个系统的。 在启动程序时会创建application对象,所以application对象诞生于其他任何对象之前,并且一直存活,直到应用进程结束。 默认情况下系统会为每个应用分配一个进程,进程的名称就是每个项目的包名,当进程启动的时候,系统会创建application对象,并调用对象的oncreate函数。 application在项目运行过程中不会改变,而activity在切换过程中,会有不断的创建和销毁,服务切换也是创建和销毁,但是application不会改变 application对象由android系统管理,其回调函数都运行于ui线程即主线程,

回调函数有oncreate,onconfigurationchanged即系统配置变更,包括屏幕方向变化,系统语言变化等,onlowmemory释放内存 application对象全局可访问,且全程陪同应用进程,适合共享全局状态,初始化全应用所需的服务。 静态单例也可以实现全局状态的共享

自定义application类

继承application类,并在androidmanifest.xml文件中的application下添加name属性,加上自定义的application类。

接下来以一个实例来展示application类的全局应用状态。

这里写图片描述

这里写图片描述

两张图片分别对应两个activity,myapplication类是application类的子类,在myapplication类中声明name变量,为其设置set和get方法。在activity1和activity2中获取myapplication的变量,并在activity1中设置name变量。

下面是myapplication的实现:

public class myapplication extends application {

 public static string name="ann";

 public static string getname() {
  return name;
 }

 public static void setname(string name) {
  myapplication.name = name;
 }
//application的创建,第一个创建,比activity中的oncreate方法调用还要早
 @override
 public void oncreate() {
  super.oncreate();
  toast.maketext(this, "application_oncreate"+this, toast.length_short).show();
 }

//监听系统变化的方法,如屏幕旋转,语言更改
 @override
 public void onconfigurationchanged(configuration newconfig) {
  super.onconfigurationchanged(newconfig);
 }
//回收内存
 @override
 public void onlowmemory() {
  super.onlowmemory();
 }
}

activity1的实现:

public class activity1 extends appcompatactivity implements view.onclicklistener{
 private button setname,getname,startactivity;
 @override
 protected void oncreate(@nullable bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);

  setname=(button)findviewbyid(r.id.setusername);
  getname=(button)findviewbyid(r.id.getusername);
  startactivity=(button)findviewbyid(r.id.startactivity);
  setname.setonclicklistener(this);
  getname.setonclicklistener(this);
  startactivity.setonclicklistener(this);
 }
//当从activity2跳转到activity1时会调用这个方法,即activity1恢复
 @override
 protected void onresume() {
  super.onresume();
  toast.maketext(this, "activity1"+getapplication(), toast.length_short).show();
 }
//activity1到activity2时,activity1暂停状态
 @override
 protected void onpause() {
  super.onpause();
  toast.maketext(this, "activity2"+getapplication(), toast.length_short).show();
 }

 @override
 public void onclick(view v) {
  switch (v.getid()){
case r.id.getusername:
//获取application里变量的用法,注意强制类型转换,而且在androidmanifest文件中一定要添加name属性,否则运行失败
 myapplication myapplication=(myapplication)getapplication();
 //设置name之前获取的是原来的name,设置之后则获取之后的name
 string name=myapplication.getname();
 toast.maketext(this, "getname--"+name, toast.length_short).show();
 break;

case r.id.setusername:
myapplication myapplication1=(myapplication)getapplication();
 myapplication1.setname("zhangsan");
 toast.maketext(this, "setname"+myapplication1.getname(), toast.length_short).show();
 break;

case r.id.startactivity:
 startactivity(new intent(activity1.this,activity2.class));
 break;
  }
 }
}

activity2的实现:

public class activity2 extends appcompatactivity {
 private button getname;
 @override
 protected void oncreate(@nullable bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main2);

  getname=(button)findviewbyid(r.id.getusername2);
  getname.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
 myapplication myapplication=(myapplication)getapplication();
 string name=myapplication.getname();
 //获取的name和activity1中获取的name相同,说明application的对象是属于全局的。
 toast.maketext(activity2.this, "getname:"+name, toast.length_short).show();
}
  });
 }

 @override
 protected void onresume() {
  super.onresume();
  toast.maketext(this, "activity2-"+getapplication(), toast.length_short).show();
 }

 @override
 protected void onpause() {
  super.onpause();
  toast.maketext(this, "activity2-"+getapplication(), toast.length_short).show();
 }
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网