读书人

施用全局变量

发布时间: 2012-07-28 12:25:13 作者: rapoo

使用全局变量

如想在整个应用中使用,在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(){
??? return myState;
? }
? public void setState(String s){
??? myState = s;
? }
}

class Blah extends Activity {

? @Override
? public void onCreate(Bundle b){
??? ...
??? MyApp appState = ((MyApp)getApplicationContext());
??? String state = appState.getState();
??? ...
? }
}

?

然后再manifest中添加应用:

?

<application android:name=".MyApp" android:icon="@drawable/icon" android:label="@string/app_name">
??????? <activity android:name=".ClickableListItemActivity"
????????????????? android:label="@string/app_name">
??????????? <intent-filter>
??????????????? <action android:name="android.intent.action.MAIN" />
??????????????? <category android: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() {
??????????????? return globalVariable;
??????? }

??????? public static void setGlobalVariable(int newGlobalVariable) {
??????????????? globalVariable = newGlobalVariable;
??????? }
}

通过这种方式,DataStoreClass类可能会像Activity一样在某些时候被android系统强行销毁。所以在应用程序运行期间,DataStoreClass的值可能会丢失,或得到一些您不想要的值。

读书人网 >移动开发

热点推荐