某些情況下,我們并不能方便的獲取上下文環(huán)境,因?yàn)槲覀兯{(diào)用的函數(shù)或者類中有時并不存在相關(guān)的參數(shù),放心啦,不要尬,安卓為我們提供了一個Applocation類,以便于我們?nèi)ス芾沓绦騼?nèi)的一些全局的狀態(tài)信息,比如說全局Context。
??首先,我們需要定制一個自己的Applocation類去繼承Applocation。示例如下:
public class MyApplication extends Applocation {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
}
很簡單吧,就是重寫了父類的onCreate方法,利用函數(shù)getApplicationContext()獲取了一個應(yīng)用程序級別的Context,然后提供了一個靜態(tài)的getContext方法將上述context返回。
程序啟動的時候會初始化Application類,我們要告知系統(tǒng)修改其默認(rèn)做法,轉(zhuǎn)而啟動我們自定義的MyApplication類。具體來說就是在AndroidManifest.xml文件的<application>標(biāo)簽下進(jìn)行指定。代碼如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
......
<application
android:name="com.example.test.MyApplication"
......>
......
</application>
</manifest>
需要注意的是,我們需要在該標(biāo)簽中輸入你所開發(fā)項(xiàng)目的完整的包名。
??此外,《第一行代碼》這本書中提到了一個很重要的問題:由于每個項(xiàng)目只能有一個Application,當(dāng)我們使用第三方開源項(xiàng)目如Litepal等對application的配置有需求的資源時,就不能使用上述方法重復(fù)配置了,錯誤的示范如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
......
<application
android:name="com.example.test.MyApplication"
android:name="org.litpal.LitePalApplication"
......>
......
</application>
</manifest>
辣么,要腫么做呢?很簡單,在我們自定義的Application中加入對litepal的支持就好了,示例如下:
public class MyApplication extends Applocation {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
LitePalApplication.initialize(context);
}
public static Context getContext() {
return context;
}
}
這樣一來,可以實(shí)現(xiàn)同樣的配置效果,又不會發(fā)生沖突哈,棒棒噠!