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

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

-type text 就會 etc lis ret 問題 normal 答案

一般獲取context的方法

1.Activity.this的context

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

2.getApplicationContext()

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

3.getBaseContext()

返回由構造函數指定或setBaseContext()設置的上下文

4.getActivity()

多用於fragment中


但是問題來了!

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

自定義Application


廢話少說,上幹貨!


自定義Application步驟

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

/**
 * Author: ZhouJianbin周健彬
 */
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"

<application
    android:name="MyApplication" >
3.然後使用只要需要context但又獲取不得或獲取麻煩的話,只要使用:

MyApplication.getContext()


註意:最好是在不得已的情況下使用上述方法來獲取context,而不是只要用到context就使用MyApplication.getContext(),因為這涉及到View等存在生命周期的問題。如toast要用到的context就要使用Activvity.this,否則可能報錯。(題外話:如果這麽容易被代替,google又不是傻子,早就淘汰了)


轉載請註明出處,謝謝!


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