this、getContext()、getApplicationContext()、getApplication()、getBaseContext() 之间的区别

  相信很多人多会问Context到底是什么?

  我们可以理解为“上下文”:它贯穿整个应用;
也可以理解成“运行环境”:它提供了一个应用运行所需要的信息,资源,系统服务等;
同样可以理解成“场景”:用户操作和系统交互这一过程就是一个场景,比如Activity之间的切换,服务的启动等都少不了Context。
然而以上这些都是我们从抽象角度去理解Context的作用,那么从Code代码来看Context到底是什么呢?Activity是一个Context,Application是一个Context,Service也是一个Context你信么?不信的话,同样还是那句话“look the fuck resource code”。

  从源码看Context就是一个抽象类,里面定义了各种抽象方法,包括获取系统资源,获取系统服务,发送广播,启动Activity,Service等。所以从源码角度看Context就是抽象出一个App应用所有功能的集合,由于Context是一个纯的抽象类,所以它的具体的方法实现是在其之类ContextImpl中实现了,稍后分析。我们平时在MainActivity中会这么给mContext = this赋值,其言外之意就是当前Activity类就是Context,那说明Activity是Context的子类。通过Android Studio查看Context的子类图如下:

 

 

  •   使用this, 说明当前类是context的子类,一般是activity application等;

 

        this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this.

 

        Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁

 

  • 使用getApplicationContext 取得的是当前app所使用的application,这在AndroidManifest中唯一指定。意味着,在当前app的任意位置使用这个函数得到的是同一个Context;

        getApplicationContext(): 返回应用的上下文,生命周期是整个应用,应用摧毁,它才摧毁。

 

  • 使用getContext获取的是当前对象所在的Context, Context通常翻译成上下文,我通常当成场景来理解。
  • getApplication():andorid 开发中共享全局数据;
  • getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文
posted @ 2021-09-29 15:31  涂妖教  阅读(360)  评论(0)    收藏  举报