转自:http://blog.csdn.net/qq272803220/article/details/7306742
android 开发中共享全局数据
我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中的所有Activity和View都能访问到,大家在遇到这种情况时,可能首先会想到自己定义一个类,然后创建很多静态成员,不过在Android中,我们可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉。
我们可以在Activity中使用getApplication(),方法来获得Application,它是代表我们的应用程序的类,使用它可以获得当前应用的主题,资源文件中的内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性。
首先写一个Application子类,主要重写里面的onCreate方法,就是创建的时候,初始化变量的值。然后在整个应用中的各个文件中就可以对该变量进行操作了。
启动Application时,系统会创建一个PID,即进程ID,所有的Activity就会在此进程上运行。那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。下面举个例子详细介绍一下应用步骤。
1、写Application类的子类。
-
public class MyApplication extends Application {
-
-
private String name;
-
-
@Override
-
public void onCreate() {
-
super.onCreate();
-
setName(NAME);
-
}
-
-
public String getName() {
-
return name;
-
}
-
-
public void setName(String name) {
-
this.name = name;
-
}
-
-
private static final String NAME = "MyApplication";
-
}
2、在配置文件ApplicationManifest.xml中配置MyApplication。
-
"1.0" encoding="utf-8"?>
-
""
-
package="com.hisoft.app"
-
android:versionCode="1"
-
android:versionName="1.0">
-
"@drawable/icon" android:label="@string/app_name"
-
android:name=".MyApplication"> 就是这儿,将我们以前一直用的默认Application给他设置成我们自己做的MyApplication
-
".MyFirstActivity"
-
android:label="@string/app_name">
-
-
"android.intent.action.MAIN" />
-
"android.intent.category.LAUNCHER" />
-
-
-
".MySecondActivity">
-
-
"8" />
-
-
3、在Activity中应用Application例子:
-
public class MyFirstActivity extends Activity {
-
-
private MyApplication app;
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
app = (MyApplication) getApplication();
-
Log.e("MyFirstActivityOriginal", app.getName());
-
app.setName("is cool");
-
Log.e("MyFirstActivityChanged", app.getName());
-
Intent intent = new Intent();
-
intent.setClass(this, MySecondActivity.class);
-
startActivity(intent);
-
}
-
}
-
public class MySecondActivity extends Activity {
-
-
private MyApplication app;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.main);
-
app = (MyApplication) getApplication();
-
Log.e("MySecondActivity", app.getName());
-
}
-
}