Android應用程序級全局變量Application

在Android中,咱們能夠經過繼承Application類來實現應用程序級的全局變量,這種全局變量方法相對靜態類更有保障,直到應用的全部Activity所有被destory掉以後纔會被釋放掉。android

咱們能夠在Activity中使用getApplication(),方法來得到Application,它是表明咱們的應用程序的類,使用它能夠得到當前應用的主題,資源文件中的內容等,這個類更靈活的一個特性就是能夠被咱們繼承,來添加咱們本身的全局屬性。app

首先寫一個Application子類,主要重寫裏面的onCreate方法,就是建立的時候,初始化變量的值。而後在整個應用中的各個文件中就能夠對該變量進行操做了。 
啓動Application時,系統會建立一個PID,即進程ID,全部的Activity就會在此進程上運行。那麼咱們在Application建立的時候初始化全局變量,同一個應用的全部Activity均可以取到這些全局變量的值,換句話說,咱們在某一個Activity中改變了這些全局變量的值,那麼在同一個應用的其餘Activity中值就會改變。下面舉個例子詳細介紹一下應用步驟。ide

一、寫Application類的子類。this

  1. public class MyApplication extends Application {  
  2.  
  3.         private String name;  
  4.           
  5.         @Override 
  6.         public void onCreate() {  
  7.                 super.onCreate();  
  8.                 setName(NAME); //初始化全局變量  
  9.         }  
  10.  
  11.         public String getName() {  
  12.                 return name;  
  13.         }  
  14.  
  15.         public void setName(String name) {  
  16.                 this.name = name;  
  17.         }  
  18.           
  19.         private static final String NAME = "MyApplication";  

二、在配置文件ApplicationManifest.xml中配置MyApplication。spa

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
  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> 

三、在Activity中應用Application例子:xml

  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.     }  
  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.         }          
相關文章
相關標籤/搜索