Android中关于Application类的粗略见解

来源:互联网 发布:淘宝绫致时装官方店 编辑:程序博客网 时间:2024/06/03 19:44

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

输出结果:

wangwangwu
0 0
原创粉丝点击