Android 獲取全局Context的技巧


  回想這么久以來我們所學的內容,你會發現有很多地方都需要用到Context,彈出Toast的時候需要、啟動活動的時候需要、發送廣播的時候需要、操作數據庫的時候需要、使用通知的時候需要等等等等。或許目前你還沒有為得不到Context而發愁過,因為我們很多的操作都是在活動中進行的,而活動本身就是一個Context對象。但是,當應用程序的架構逐漸開始復雜起來的時候,很多的邏輯代碼都將脫離Activity類,但此時你又恰恰需要使用Context,也許這個時候你就會感到有些傷腦筋了。

  在某些情況下,獲取Context並非是那么容易的一件事,有時候還是挺傷腦筋的。不過別擔心,下面我們就來學習一種技巧,讓你在項目的任何地方都能夠輕松獲取到Context。

  Android提供了一個Application類,每當應用程序啟動的時候,系統就會自動將這個類進行初始化。而我們可以定制一個自己的Application類,以便於管理程序內一些全局的狀態信息,比如說全局Context。

定制一個自己Application其實並不復雜,首先我們需要創建一個MyApplication類繼承自Application,代碼如下所示:

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進行返回。

  接下來我們需要告知系統,當程序啟動的時候應該初始化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的時候一定要加上完整的包名,不然系統將無法找到這個類。

這樣我們就已經實現了一種全局獲取Context的機制,之后不管你想在項目的任何地方使用Context,只需要調用一下AppContext.getContext()就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM