导读:
什么情况下需要使用全局上下文呢,情况有以下几点:
- 例如在Service服务中不能通过参数传过来,但是又需要用到这个context参数,这种情况下就需要使用全局上下文。
- 例如工具类中,频繁传递上下文参数的话,会比较麻烦,一劳永逸的方法就是使用自定义Application,获取全局上下文。
获取context上下文的方法:
一、Activity.this
返回当前activity(活动)的上下文,属于activity ,activity销毁,上下文也就跟着销毁。
二、getApplicationContext()
返回应用的上下文,生命周期是整个应用,应用销毁,它才跟着销毁。
三、getBaseContext()
返回由构造函数指定或setBaseContext()设置的上下文
四、getActivity()
这个方法多用在fragment中
步骤一:在Activity同级包里,写一个新的类继承Application,代码如下:
/**
* 全局上下文
*/
public class BaseApplication extends Application {
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
/**
* 获取全局上下文*/
public static Context getContext() {
return context;
}
}
步骤二:AndroidManifest.xml清单配置文件,<application>中加入android:name="BaseApplication"
<application
android:name="BaseApplication"
android:requestLegacyExternalStorage="true"
android:preserveLegacyExternalStorage="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
步骤三:调用全局上下文
//在需要调用的地方直接使用
BaseApplication.getContext()