来自: http://www.linuxidc.com/Linux/2012-06/63934.htm(有修改)

Android中用Application类实现全局变量

在Java中如果要使用全局变量,一般定义public static类型的变量。但是这种方法不符合 Android的框架架构,Android中要使用Application context。

Application是一个基类,这个基类的作用是获取整个App的状态,我们需要自己定义一个类来继承这个基类。代码如下:

  1. packagecom.tianjf;
  2. importandroid.app.Application;
  3. publicclassMyApplicationextendsApplication{
  4. privatebooleanmHasPassword;
  5. publicbooleanismHasPassword(){
  6. returnmHasPassword;
  7. }
  8. publicvoidsetmHasPassword(booleanmHasPassword){
  9. this.mHasPassword=mHasPassword;
  10. }
  11. @Override
  12. publicvoidonCreate(){
  13. mHasPassword=true;
  14. super.onCreate();
  15. }
  16. }
我们定义了一个MyApplication继承自Application,并定义了一个全局变量mHasPassword,然后复写基类的onCreate方法,onCreate负责对所有全局变量赋初期值。

我们还需要把自定义的Application类添加到AndroidManifest.xml里面,代码如下:

  1. <application
  2. android:name="MyApplication"
  3. 。。。。。。。。。。。。。。。。。。。。。。。。。。。
  4. 。。。。。。。。。。。。。。。。。。。。。。。。。。。
  5. </application>
这样做的目的:App的进程被创建的时候,这个类就会被实例化,onCreate方法就会被执行,给所有全局变量赋初期值。

这样,所有的Activity就共同拥有这个类里面的变量了。

下面用两个Activity来测试一下,当一个Activity改变了全局变量的值之后,看看另一个Activity能不能取到改变后的值。

ApplicationDemoActivity.java

  1. packagecom.tianjf;
  2. importandroid.app.Activity;
  3. importandroid.content.Intent;
  4. importandroid.os.Bundle;
  5. importandroid.util.Log;
  6. importandroid.view.View;
  7. importandroid.view.View.OnClickListener;
  8. publicclassApplicationDemoActivityextendsActivityimplements
  9. OnClickListener{
  10. privatestaticfinalStringTAG="ApplicationDemoActivity";
  11. @Override
  12. publicvoidonCreate(BundlesavedInstanceState){
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. findViewById(R.id.button).setOnClickListener(this);
  16. }
  17. @Override
  18. publicvoidonClick(Viewv){
  19. switch(v.getId()){
  20. caseR.id.button:
  21. MyApplicationmyApplication=(MyApplication)getApplication();
  22. Log.i(TAG,String.valueOf(myApplication.ismHasPassword()));
  23. myApplication.setmHasPassword(false);
  24. Intentintent=newIntent(this,AnotherActivity.class);
  25. startActivity(intent);
  26. break;
  27. default:
  28. break;
  29. }
  30. }
  31. }
AnotherActivity.java
  1. packagecom.tianjf;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. importandroid.util.Log;
  5. publicclassAnotherActivityextendsActivity{
  6. privatestaticfinalStringTAG="AnotherActivity";
  7. @Override
  8. protectedvoidonCreate(BundlesavedInstanceState){
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.another);
  11. MyApplicationmyApplication=(MyApplication)getApplication();
  12. Log.i(TAG,String.valueOf(myApplication.ismHasPassword()));
  13. }
  14. }
main.xml
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="@string/hello"/>
  10. <Button
  11. android:id="@+id/button"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"
  14. android:text="Startanotheractivity"/>
  15. </LinearLayout>
another.xml
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="@string/hello"/>
  10. </LinearLayout>
运行一下看看结果。

更多相关文章

  1. 【转】Android自定义属性,attr format取值类型
  2. Android SeekBar自定义使用图片和颜色显示
  3. Android UI设计系统-android selector 开始自定义样式
  4. Android中自定义Dialog样式

随机推荐

  1. Android入门进阶教程(4)-android hello w
  2. c++11 + SDL2 + ffmpeg +OpenAL + java =
  3. Android常用的intent action汇总
  4. android-pluginmgr不需要插件规范的apk动
  5. Log分析
  6. Android之ArrayAdapter用法总结
  7. LXR 索引Android 源码
  8. 专题 - Web应用
  9. App测试中ios和Android的区别
  10. Android隐藏输入法自带的输入框,将输入框