Android 全域性獲取Context(隨時隨地的使用Context)
阿新 • • 發佈:2019-02-19
參考:《第一行程式碼》第13章
#####################################################
很多地方都需要使用Context,彈出Toast/啟動活動/傳送廣播/操作資料庫/使用通知等
活動(Activity)本身就是一個Context物件,但當應用程式的架構開始複雜起來,很多的邏輯程式碼都將脫離Activity類,但此時又恰恰需要使用Context,這時,問題來了?
##################################################
第一種獲取Context的方法
在被呼叫方法的引數中設定一個Context,等待其他方法呼叫時傳入一個Context,這時就可以使用
#####################################################
第二種方法(更有效)
Android提供了一個Application類,每當應用程式啟動的時候,系統就會自動將這個類進行初始化。而我們可以定製一個自己的Application類,以便於管理程式內一些全域性的狀態資訊,比如說全域性Context
首先,建立一個MyApplication類繼承自Application:
package com.example.mylibrary; import android.app.Application; import android.content.Context; /** * Created by root on 15-10-1. */ public class MyApplication extends Application { private static Context context; @Override public void onCreate() { super.onCreate(); context = getApplicationContext(); } public static Context getContext() { return context; } }
上面程式碼中,重寫了父類的onCreate()方法,並通過呼叫getApplicationContext()方法得到了一個應用程式級別的Context,然後又提供了一個靜態的getContext方法,將剛才獲取到的Context進行返回
下面,我們需要告知系統,當程式啟動的時候應該初始化MyApplication類,而不是預設的Application類。
在AndroidManifest.xml檔案的<application>標籤下進行指定就可以了:
<application android:name="com.example.mylibrary.MyApplication"
注意:在這裡指定MyApplication的時候一定要加上完整的包名,不然系統將無法找到這個類
這樣就實現了一種全域性獲取Context的機制,之後不管你想在專案的任何地方使用Context,只需要呼叫一下MyApplication.getContext()就可以了
Toast.makeText(MyApplication.getContext(), "hello mylibrary", Toast.LENGTH_SHORT).show();