使用application传递全局变量

来源:互联网 发布:redis缓存什么数据 编辑:程序博客网 时间:2024/06/08 14:14

1、有关application的说明
(1)Application和Activity,Service一样是Android框架的系统组件,当Android程序启动时系统创建一个Application对象,用来存储系统的一些信息。Android系统自动回位每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例模式的一个类。
(2)通常我们不需要指定一个application的,系统会自动帮我们创建,如果我们需要自己创建一个Application,只需要创建一个类继承Application并且在AndroidMainfest.xml文件中的application标签中进行注册(在application标签添加name属性,并且添加自己Application的名字就可以)
(3)启动Application时,系统会创建一个PID,即进程ID,所有的Activity都会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
(4)Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以可以通过Application来进行一些,如:数据传递、数据共享和数据缓存等操作。

2、应用实例
MainActivity

package com.example.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class MainActivity extends Activity {    private MyApp myApp;    private String log;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myApp=(MyApp) getApplication();        Log.i(log,"修改前的value"+myApp.getValue());        myApp.setValue("hello");        Log.i(log,"修改后的value"+myApp.getValue());        Intent intent=new Intent(this,SecondActivity.class);        startActivity(intent);    }     }

SecondActivity

package com.example.test;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class SecondActivity extends Activity {    private MyApp myApp;    private String log;    @Override     protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        myApp=(MyApp)getApplication();        Log.i(log,"调用secondActivity查看"+myApp.getValue());    }}

MyApp

package com.example.test;import android.app.Application;public class MyApp extends Application{    private String str="VALUE";    private String value;    @Override    public void onCreate(){        super.onCreate();        setValue(str);    }    public void setValue(String value) {        // TODO Auto-generated method stub        this.value=value;    }    public String getValue(){        return value;           }}

AndroidMainfest.xml

<!--添加了name属性-->  <application        android:name="MyApp"        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.example.test.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            android:name=".SecondActivity"></activity>    </application>
0 0