Context是什么?
1) Context是一个抽象类,其通用实现在ContextImpl类中。
2) Context:是一个访问application环境全局信息的接口,通过它可以访问application的资源和相关的类,其主要功能如下:
启动Activity
启动和停止Service
发送广播消息(Intent)
注册广播消息(Intent)接收者
可以访问APK中各种资源(如Resources和AssetManager等)
可以访问Package的相关信息
APK的各种权限管理
从以上分析可以看出,Context就是一个对APK包无所不知的大管家,大家需要什么,直接问它就可以了。
在上面我们看到了conntent的功能和作用下面就是我自己的一些理解
context 在很多地方都会用到,入Dialog、RecyclerView的onCreateView方法中的 View view = Layout.from(parent.getcontent()).inflate.(R.layout.Recycle,parent,flase)
和Intent intent = new Intent(context,NewsContentActivity.class)等这些方法都会用到content,
1) 创建Application 对象时, 而且整个App共一个Application对象
2) 创建Service对象时
3) 创建Activity对象时
因此应用程序App共有的Context数目公式为:
总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)
那么我对contenx的理解是,用到context的地方都是要加载页面、xml这类,而这些页面都是Activity,要放到View中去的,
而View的加载的底层本质都是LayoutInflater.from(this).inflate(resId,null)用的是这个方法,
而Context是抽象类,Activity和Application为Context的间接子类,所以我就感觉其实context可以理解为想加载想要的页面所需要的
一个框架,我们需要的是把想要出现的东西放到这个Context中(即是View),不同的View有不同的context,就像Intent的作用,可以
从这个View1调转到另一个View2中,而View2是从View1跳转而来的,那一般我们是 Intent intent = new Intent(this(这里也可为context),View2.class),context.startActivity(intent);
这里的this为这个类继承了Application或Activity,所以都有继承context,
那什么时候要用到context呢?
那通过这个例子我们可以这么理解context,一般要用到页面出现新的View的时候(如Dialog、新的Activity等)我们都要用到context
那这个context用哪个好呢,一般都为想要在哪个View中弹出或跳转的那一个View的context(即弹窗前的一个界面Activity的context)
因为View都是Activity,context是调用LayoutInflater.from(this).inflate(resId,null)的关键,是java代码到.xml页面布局的桥梁实现,其实
也可以通过
Context context = MainActivity.this;
因为MainActivity继承Activity,而Activity继承Context,所以它也可以用来提供Activity Contex;
或
单独新建一类,获取当前活动的context对象
public class MyApplication extends Application {
private static Context context; @Override
public void onCreate() {
super.onCreate();
context = getApplicationContext(); //获取应用上下文环境
public static Context getContext() {
return context;
}
}
另外要在AndroidManifest.xml中声明Application的名字
<application
android:name=".MyApplication"
使用时context对象,调用就可
MyApplication.getContext();