Application设置全局变量以及传值

120 阅读3分钟

文章来源:www.eoeandroid.com/thread-4798…

  1. /**\

  2. * 重写Application,主要重写里面的onCreate方法,就是创建的时候,\

  3. * 我们让它初始化一些值,前段时间在javaeye里面看到过一个例子,与此相似,\

  4. * 我做了些改进。听说外国开发者习惯用此初始化一些全局变量,好像在Activity\

  5. * 一些类里面初始化全局变量的化,会遇到一些空指针的异常,当然,我没有遇到过。\

  6. * 如果用此方法初始化的话,那么就可以避免那些有可能出现的错误。\

  7. * \

  8. * 启动Application,他就会创建一个PID,就是进程ID,所有的Activity就会在此进程上运行。\

  9. * 那么我们在Application创建的时候初始化全局变量,那么是不是所有的Activity都可以拿到这些\

  10. * 全局变量,再进一步说,我们在某一个Activity中改变了这些全局变量的值,那么在别的Activity中\

  11. * 是不是值就改变了呢,这个算不算传值呢?\

  12. * OK,那么下面的例子我们测试下。。。\

  13. * @author yong.wang\

  14. *\

  15. */\

  16. public class MyApplication extends Application {

    \

  17. \

  18.         private String name;\

  19.         \

  20.         @Override\

  21.         public void onCreate() {

    \

  22.                 super.onCreate();\

  23.                 setName(NAME); //初始化全局变量\

  24.         }\

  25. \

  26.         public String getName() {

    \

  27.                 return name;\

  28.         }\

  29. \

  30.         public void setName(String name) {

    \

  31.                 this.name = name;\

  32.         }\

  33.         \

  34.         private static final String NAME = "MyApplication";\

  35. }

复制代码



//Ok,应用程序创建好了,不过我们应该在配置文件ApplicationManifest.xml中将要运行的应用程序MyApplication加进去,修改下:
\

  1. <?xml version="1.0" encoding="utf-8"?>\

  2. <manifest xmlns:android="schemas.android.com/apk/res/and…

  3.       package="com.hisoft.app"\

  4.       android:versionCode="1"\

  5.       android:versionName="1.0">\

  6.     <application android:icon="@drawable/icon" android:label="@string/app_name"\

  7.                  android:name=".MyApplication">  就是这儿,将我们以前一直用的默认Application给他设置成我们自己做的MyApplication\

  8.         <activity android:name=".MyFirstActivity"\

  9.                   android:label="@string/app_name">\

  10.             <intent-filter>\

  11.                 <action android:name="android.intent.action.MAIN" />\

  12.                 <category android:name="android.intent.category.LAUNCHER" />\

  13.             </intent-filter>\

  14.         </activity>\

  15.         <activity android:name=".MySecondActivity"></activity>\

  16.     </application>\

  17.     <uses-sdk android:minSdkVersion="8" />\

  18. \

  19. </manifest>

复制代码




当xml配置文件运行完android:name=".MyApplication">,在此那么就分配好了进程ID,再下面,我们就要运行我们的Activity了
\

  1. public class MyFirstActivity extends Activity {

    \

  2.     \

  3.         private MyApplication app;\

  4.         \

  5.     @Override\

  6.     public void onCreate(Bundle savedInstanceState) {

    \

  7.         super.onCreate(savedInstanceState);\

  8.         setContentView(R.layout.main);\

  9.         app = (MyApplication) getApplication(); //获得我们的应用程序MyApplication\

  10.         Log.e("MyFirstActivityOriginal", app.getName());   //将我们放到进程中的全局变量拿出来,看是不是我们曾经设置的值\

  11.         app.setName("is cool");  //OK,现在我们开始修改了\

  12.         Log.e("MyFirstActivityChanged", app.getName()); //再看下,这个值改变了没有\

  13.         Intent intent = new Intent();  //更重要的是我们可以看在别的Activity中是拿到初始化的值,还是修改后的\

  14.         intent.setClass(this, MySecondActivity.class);\

  15.         startActivity(intent);\

  16.     }\

  17. }

复制代码





恩恩,上面运行完了,就要跳到这个Activity了
\

  1. public class MySecondActivity extends Activity {

    \

  2. \

  3.         private MyApplication app;\

  4.         \

  5.         @Override\

  6.         protected void onCreate(Bundle savedInstanceState) {

    \

  7.                 super.onCreate(savedInstanceState);\

  8.                 setContentView(R.layout.main);\

  9.                 app = (MyApplication) getApplication();  //获取应用程序\

  10.                 Log.e("MySecondActivity", app.getName()); //获取全局值\

  11.         }        \

  12. }

复制代码




OK,看下值:当然我已经运行过了,
MyFirstActivityOriginal       MyApplication 
MyFirstActivityChanged     is cool
MySecondActivity             is cool
看看,是不是特别令人兴奋,当然有可能你退出之后再运行的时候,就第2、3。。。次,有可能会3个输出全是 is cool,那是你没杀掉进程的问题。\