使用全局变量
如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context
每个Activity 都是Context,其包含了其运行时的一些状态,android保证了其是single instance的。 方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
这个效果就是使用静态变量是一样的,但是其更符合android的架构体系。class MyApp extends Application {
private String myState;
public String getState(){
returnmyState;
}
publicvoidsetState(Strings){
myState=s;
}
}class Blah extends Activity {
@Override
publicvoidonCreate(Bundleb){
...
MyAppappState=((MyApp)getApplicationContext());
Stringstate=appState.getState();
...
}
}然后再manifest中添加应用:
<application android:name=".MyApp" android:icon="@drawable/icon" android:label="@string/app_name">
<activityandroid:name=".ClickableListItemActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity></application>
说明:
(1)Application对象只有在应用程序中所有Activity都destroy时才会destrory,所有我们可以在任何一个Activity中访问它;
(2)为什么我们不能使用static 变量来存放全局变量呢?
public class DataStoreClass { private static int globalVariable=1;
public static int getGlobalVariable() {
returnglobalVariable;
}public static void setGlobalVariable(int newGlobalVariable) {
globalVariable=newGlobalVariable;
}
}通过这种方式,DataStoreClass类可能会像Activity一样在某些时候被android系统强行销毁。所以在应用程序运行期间,DataStoreClass的值可能会丢失,或得到一些您不想要的值。