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

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

package com.tianjf; import android.app.Application; public class MyApplication extends Application { private boolean mHasPassword; public boolean ismHasPassword() { return mHasPassword; } public void setmHasPassword(boolean mHasPassword) { this.mHasPassword = mHasPassword; } @Override public void onCreate() { mHasPassword = true; super.onCreate(); } } 

我们定义了一个MyApplication继承自Application,并定义了一个全局变量mHasPassword,然后复写基类的onCreate方法,onCreate负责对所有全局变量赋初期值。

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

<application android:name="MyApplication" 。。。。。。。。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。。。。。。。。 </application> 

这样做的目的:App的进程被创建的时候,这个类就会被实例化,onCreate方法就会被执行,给所有全局变量赋初期值。

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

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

ApplicationDemoActivity.java

package com.tianjf; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; public class ApplicationDemoActivity extends Activity implements OnClickListener { private static final String TAG = "ApplicationDemoActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.button).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: MyApplication myApplication = (MyApplication) getApplication(); Log.i(TAG, String.valueOf(myApplication.ismHasPassword())); myApplication.setmHasPassword(false); Intent intent = new Intent(this, AnotherActivity.class); startActivity(intent); break; default: break; } } } 

AnotherActivity.java

package com.tianjf;    import android.app.Activity;  import android.os.Bundle;  import android.util.Log;    public class AnotherActivity extends Activity {        private static final String TAG = "AnotherActivity";            @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.another);          MyApplication myApplication = (MyApplication) getApplication();          Log.i(TAG, String.valueOf(myApplication.ismHasPassword()));      }  }  

main.xml

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:orientation="vertical" >        <TextView          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:text="@string/hello" />        <Button          android:id="@+id/button"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:text="Start another activity" />    </LinearLayout>  

another.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout> 


更多相关文章

  1. android 自定义view 实现定制二维码扫描框
  2. 自定义控件
  3. Android 中自定义控件和属性(attr.xml,declare-styleable,TypedA
  4. Android 自定义阴影效果详解及实例
  5. Android修改原生RatingBar颜色、大小,以及自定义的样式
  6. Android UI自定义Spinner下拉框(用popuwindow实现)
  7. 自定义SeekBarPreference控件(老外出品,直接在preferences文件中
  8. android实现自定义相机以及图片的水印

随机推荐

  1. Android Intent的几种用法全面总结
  2. 如何用Android(安卓)Studio打多包名APK
  3. Android(安卓)Frame动画demo
  4. Android使用Fragment打造万能页面切换框
  5. Android init.rc详解
  6. Android的快速开发框架,Afinal 0.2.1 发布
  7. android 本地数据库
  8. Google Android Market疑遭屏蔽
  9. Android项目应用程序—应用程序及生命周
  10. 关于Android机型的pid vid的那些破事儿