Android 獲取全局Context的技巧

  回想這麼久以來咱們所學的內容,你會發現有不少地方都須要用到Context,彈出Toast的時候須要、啓動活動的時候須要、發送廣播的時候須要、操做數據庫的時候須要、使用通知的時候須要等等等等。或許目前你尚未爲得不到Context而發愁過,由於咱們不少的操做都是在活動中進行的,而活動自己就是一個Context對象。可是,當應用程序的架構逐漸開始複雜起來的時候,不少的邏輯代碼都將脫離Activity類,但此時你又偏偏須要使用Context,也許這個時候你就會感到有些傷腦筋了。android

  在某些狀況下,獲取Context並不是是那麼容易的一件事,有時候仍是挺傷腦筋的。不過別擔憂,下面咱們就來學習一種技巧,讓你在項目的任何地方都可以輕鬆獲取到Context。數據庫

  Android提供了一個Application類,每當應用程序啓動的時候,系統就會自動將這個類進行初始化。而咱們能夠定製一個本身的Application類,以便於管理程序內一些全局的狀態信息,好比說全局Context。架構

定製一個本身Application其實並不複雜,首先咱們須要建立一個MyApplication類繼承自Application,代碼以下所示:app

public class AppContext extends Application {

    private static Context instance;

    @Override
    public void onCreate() 
    {
        instance = getApplicationContext();
    }
    
    public static Context getContext()
    {
        return instance;
    }
    
}

  能夠看到,MyApplication中的代碼很是簡單。這裏咱們重寫了父類的onCreate()方法,並經過調用getApplicationContext()方法獲得了一個應用程序級別的Context,而後又提供了一個靜態的getContext()方法,在這裏將剛纔獲取到的Context進行返回。ide

  接下來咱們須要告知系統,當程序啓動的時候應該初始化MyApplication類,而不是默認的Application類。這一步也很簡單,在AndroidManifest.xml文件的<application>標籤下進行指定就能夠了,代碼以下所示:學習

<application
        android:allowBackup="true"
        android:icon="@drawable/ista_launcher"
        android:label="@string/app_name" 
        android:theme="@style/AppTheme" 
        android:name="cn.com.ista.pdachina.app.AppContext">
</application>

注意這裏在指定MyApplication的時候必定要加上完整的包名,否則系統將沒法找到這個類。spa

這樣咱們就已經實現了一種全局獲取Context的機制,以後無論你想在項目的任何地方使用Context,只須要調用一下AppContext.getContext()就能夠了。code

相關文章
相關標籤/搜索