Android中关于Application类的粗略见解

本文介绍如何利用Android系统组件Application来管理全局变量。通过继承Application类并重写onCreate方法,可以在应用启动时初始化全局变量。此外,文章还提供了具体实例说明如何在不同Activity间共享这些变量。

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AidenWU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值