Application和Activity、Service、BroadcastReceiver一样,是Android系统框架的一个系统组件,当Android程序启动时会自动创建一个Application对象,用来存储系统的一些信息。这个Application对象只会创建一个,所以Application可以认为是单利模式(singleton)的一个类。
通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并指向自己的 Application的名字即可)。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。
应用场景:
在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放
以下是相关代码:
1、首先是定义一个类继承Application
public class UserApplication extends Application {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public void onCreate() {
super.onCreate();
setUserName("noUserName");
}
}
注意:继承Application类主要重写里面的onCreate()方法,使Application在创建的时候初始化变量的值,此方法才是真正的Android程序的入口。
2、创建完自定义的Application后,我们要在AndroidManifest.xml中的application中声明
<application
android:name = "UserApplication">
</application>
3、声明后,就可以在Activity中使用,只需要调用Context的 getApplicationContext或者Activity的getApplication方法来获得一个Application对象,然后再得到相应的成员变量即可。它是代表我们的应用程序的类,使用它可以获得当前应用的主题和资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。
MainActivity:
public class MainActivity extends Activity {
UserApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// app = (UserApplication ) getApplication();
app = (UserApplication ) getApplicationContext();
Intent i = new Intent(MainActivity.this,Activity2.class);
app.setUserName("wang");
System.out.println(app.getUserName());
startActivityForResult(i,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println(app.getUserName());
}
}
Activity2:
public class Activity2 extends Activity {
UserApplication app;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity2);
app = (UserApplication ) getApplication();
System.out.println(app.getUserName());
app.setUserName("wu");
setResult(1,new Intent());
finish();
}
}
输出结果:
wang
wang
wu
本文介绍如何利用Android系统组件Application来管理全局变量。通过继承Application类并重写onCreate方法,可以在应用启动时初始化全局变量。此外,文章还提供了具体实例说明如何在不同Activity间共享这些变量。

被折叠的 条评论
为什么被折叠?



