自己第一个程序开始,我们不断使用上下文这个概念,但是它到底是什么?有什么作用?还是很模糊的,只知道很多方法中必须要传入当前对象的上下文才行。
一、上下文的概念
应用程序运行所依赖的环境,和javaweb中的context一样,指的是一个活动或整个项目的所有信息(不同的上下文,有不同的代表)
二、上下文的作用
拿到上下文后可以很容易得到:
- resouce文件夹
- assets文件夹
- 应用程序的包名
- 其它信息
三、上下文的写法
上下文有两种书写方式,对应的是两个不同的上下文。
- MainActivity.this:当前活动的上下文
- getApplicationContext():代表整个应用程序的上下文,所有活动的父类
代表一个项目的存活周期,存活周期整个应用程序的进程只要不被销毁就存活
四、上下文的使用
项目Context和活动Context生存生存周期不一样,优先使用活动本身的Context
- getApplicationContext()的上下文类似于一个类中的static变量,context的生命周期太长了,不推荐。如:
TextView tv =new TextView(getApplicationContext())
上面的语句,让tv的生命周期与整个项目一样长,不紧浪费内存,还容易造成数据混乱
* 一般传上下文,优先传当前活动的。
五、应用举例
下面的代码会正常跳出对话框
AlertDiolog.Builder builder =new Builder(this);
builder.setTitle("警告");
builder.setMessage("关于上下文的说明");
builder.setPositiveButton("确定",null);
builder.show();
但是如果把this—>getApplicationContext(),那对话框找不到生长的根基,因为应用程序有很多上下文。此时,程序会崩溃的。