Android之Application的使用

365账户受到限制怎么办 🗓 2025-11-13 14:00:44 ✍ admin 👁 1103 👍 167
Android之Application的使用

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();

}

}

最后附上别人的Application笔记: https://blog.csdn.net/pi9nc/article/details/11200969

相关推荐

苹果5改4g网络教程
365账户受到限制怎么办

苹果5改4g网络教程

🗓 07-31 👁 4270
小型电动压面机
世界杯365软件

小型电动压面机

🗓 10-22 👁 7239
软件下载
世界杯365软件

软件下载

🗓 07-18 👁 9537