前言
Context相信有Android开发经验的人不陌生,基本上每天都在接触,谈谈自己对Context的理解
内容
Context类型
Context通常被翻译为上下文,我通常理解为Android的运行环境,在Android中,Activity、Service、Application都是继承自Context。Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是这里讨论的Context。
Android应用程序如下几个时间点创建应用的上下文Context:
创建Application时
创建Activity时
创建Service时
细心的人可以发现,创建Context的时机就是创建Context的实现类。在应用第一次启动的时候,系统就会创建Application对象,同时创建ApplicationContext,而系统所有的组件都拥有一个这样的上下文对象,这个上下文对象贯穿整个应用程序的生命周期,为系统提供了全局的功能和环境支持,当然创建组件的时候,系统也会给组件创建他们自己相应的上下问对象,但是从原理上来说某些时候二者是有一些区别的。
getContext()、getApplicationContext()、this的区别
使用this,说明当前类是context类的子类,一般是application activity等
getApplicationContext()指的是app所使用的application,是在AndroidManifest唯一指定的意味着,在当前app的任意位置使用这个函数得到的是同一个Context,而使用getContext获取的是当前对象所在的Context。
举个简单的例子。
我们在公司上班, 我们是一个类,公司是一个类,公司.this是context()即公司的环境,我.this不是context,而我getcontext()是指公司的环境。而getApplicationContext()则可以看做是所有公司的集合,发生的所有事
情都在这个集合中,有且只有一个。
推荐一篇文章