1. 程式人生 > >Android獲取Context(任意位置任意地方,全域性上下文)

Android獲取Context(任意位置任意地方,全域性上下文)

一般獲取context的方法

1.Activity.this的context 

(一般用法)返回當前activity的上下文,屬於activity ,activity 摧毀他就摧毀

2.getApplicationContext() 

返回應用的上下文,生命週期是整個應用,應用摧毀它才摧毀

3.getBaseContext() 

返回由建構函式指定或setBaseContext()設定的上下文

4.getActivity() 

多用於fragment中

一般方法在一般的地方都能獲取,但是特殊的地方呢,上述情況都不太管用了,如工具類。但是有時過多時就會覺得過於頻繁。那麼有什麼一勞永逸的方法,答案就是使用自定義Application。

自定義Application步驟

1.寫一個新的類繼承Application,程式碼如:

public class MyApplication extends Application {

    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        initXunFei();
    }
    /**
     * 獲取全域性上下文*/
    public static Context getContext() {
        return context;
    }
}

2.新增在manifest中<application>中加入android:name="MyApplication"

3.然後使用只要需要context但又獲取不得或獲取麻煩的話,只要使用:

MyApplication.getContext()

注意:最好是在不得已的情況下使用上述方法來獲取context,而不是隻要用到context就使用MyApplication.getContext(),因為這涉及到View等存在生命週期的問題。如toast要用到的context就要使用Activvity.this,否則可能報錯。