使用全局变量

如想在整个应用中使用,在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的值可能会丢失,或得到一些您不想要的值。

相关推荐