歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android中context及全局變量小析

今天在研究context的時候,對application和activity context有了一定的了解,下面是從網上復制過來的資料,

Application context和Activity context的區別:

這是兩種不同的context,也是最常見的兩種。第一種中context的生命周期與Application的生命周期相關的,context隨著Application的銷毀而銷毀,伴隨application的一生,與activity的生命周期無關。第二種中的context跟Activity的生命周期是相關的,但是對一個Application來說,Activity可以銷毀幾次,那麼屬於Activity的context就會銷毀多次。至於用哪種context,得看應用場景,個人感覺用Activity的context好一點,不過也有的時候必須使用Application的context。application context可以通過Context.getApplicationContext或者Activity.getApplication方法獲取。

還有就是,在使用context的時候,小心內存洩露,防止內存洩露,注意一下幾個方面:

1. 不要讓生命周期長的對象引用activity context,即保證引用activity的對象要與activity本身生命周期是一樣的

2. 對於生命周期長的對象,可以使用application context

3. 避免非靜態的內部類,盡量使用靜態類,避免生命周期問題,注意內部類對外部對象引用導致的生命周期變化

現在回到正題,說一下Android全局變量,在平時的開發過程中,有時候可能會需要一些全局數據,來讓應用中的所有Activity和View都能訪問到,大家在遇到這種情況時,可能首先會想到自己定義一個類,然後創建很多靜態成員,android已經為我們提供了這種情況的解決方案:

在Android中,有一個Application類,在Activity中可以使用getApplication()方法獲得實例,使用它就可以獲得當前應用的主題、資源文件中的內容等,這個類更靈活的一個特性就是可以被繼承,來添加自己的全局屬性。例如開發一個游戲,需要保存分數,那麼我們就可以繼承Application,下面是個demo。

首先,先寫個Application的子類:

  1. import android.app.Application;  
  2. public class GameApplication extends Application {  
  3.     private int score;  
  4.     public int getScore() {  
  5.         return score;  
  6.     }  
  7.     public void setScore(int score) {  
  8.         this.score = score;  
  9.     }  
  10. }  

然後在manifest.xml文件裡面修改:

  1. <application android:name=".GameApplication" android:icon="@drawable/icon" android:label="@string/app_name">  
  2.         <activity android:name=".DemoActivity"  
  3.                   android:label="@string/app_name">  
  4.             <intent-filter>  
  5.                 <action android:name="android.intent.action.MAIN" />  
  6.                 <category android:name="android.intent.category.LAUNCHER" />  
  7.             </intent-filter>  
  8.         </activity>  
  9.         <activity android:name="ResultActivity"></activity>  
  10.     </application>  
Copyright © Linux教程網 All Rights Reserved