一、Context的概念
Context,如果是直接从文档翻译过来,就真的是十足的专业了:提供应用环境全局信息的接口,并且这个 接口是由抽象类实现的,它的执行被android系统所提供,允许我们获取以应用为特征的资源和类型,同时启动应用级的操作,如启动Activity,broadcasting和接收intent。
二、Context的作用
我们通过它访问当前包的资源(getResources、getAssets)和启动其他组件(Activity、Service、Broadcast)以及得到各种服务(getSystemService)
三、引入疑问
在项目中的工具类里或View里需要调用Context,而工具类和View里没有上下文怎么办?
四、解决疑问及用
写一个BaseApplication去继承Application,笔者在此纠结了很久,为什么是去继承Application,不是要去获取Context的嘛,应该去继承Context才对啊,对此也没找到答案,只能大致自己瞎理解理解了,实验证明继承Context时要去实现很多很多方法,超多!后来知道它是个接口而已,而继承Application时不用实现任何方法。再者,Application、Activity和Service是Context的子类,去继承Application就是去继承了Context,一样的!也就没啥好纠结了。最后就是,在清单文件里不是有一个<application>标签嘛,它是单例的,启动程序的时候就会启动Application这个类。
1.public class BaseApplication extends Application{
2.
3. /**
4. * 全局的上下文.
5. */
6. private static Context mContext;
7.
8. @Override
9. public void onCreate() {
10. super.onCreate();
11.
12. mContext = getApplicationContext();
13.
14. }
15.
16. /**获取Context.
17. * @return
18. */
19. public static Context getContext(){
20. return mContext;
21. }
22.}
要注意的是一定要在清单文件的<Application>里添加android:name=".BaseApplication" 下面就可以在工具类里使用上下文获取系统资源啦
public class UiUtils{
public static String[] getStringArray(int tabNames) {
return getResource().getStringArray(tabNames);
}
public static Resources getResource() {
return BaseApplication.getContext().getResources();
}
public static Context getContext(){
return BaseApplication.getContext();
}
- public class BaseApplication extends Application{
- /**
- * 全局的上下文.
- */
- private static Context mContext;
- @Override
- public void onCreate() {
- super.onCreate();
- mContext = getApplicationContext();
- }
- /**获取Context.
- * @return
- */
- public static Context getContext(){
- return mContext;
- }
- }
要注意的是一定要在清单文件的<Application>里添加android:name=".BaseApplication" 下面就可以在工具类里使用上下文获取系统资源啦
public class UiUtils{
public static String[] getStringArray(int tabNames) {
return getResource().getStringArray(tabNames);
}
public static Resources getResource() {
return BaseApplication.getContext().getResources();
}
public static Context getContext(){
return BaseApplication.getContext();
}