`
moor212
  • 浏览: 173906 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用全局变量

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics