context:
Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)
1、它描述的是一个应用程序环境的信息,即上下文。
2、该类是一个抽象(abstract class)类。
Application:
创建Application 对象时, 而且整个App共一个Application对象
getApplicationContext()返回的是你的整个Application的context,生命周期是整个Application,Application销毁后,它才销毁。
getBaseContext()返回由构造函数指定或者setBaseContext()设置的上下文(谷歌工程师不建议使用)。
所以application的生命周期就是整个程序的生命周期,程序完全退出application才销毁。
activity与View
window,activity,和view的关系是这个样子的:
activity中new出一个window,而window(接口)通过这个phonewindow子类来获取一个子类实例。这是一种典型composite模式。再通过
phonewindow的setContentView在内部使用LayoutInflater来给Window设置View。
这段话给我们的感觉就是 activity是窗口(界面),View是显示在窗口的布局
this和activity.this
Activity.this的context属于Activity,生命周期与Activity相同,随着当前的Activity.this消亡而消亡。
this是你当前对象的引用,this放在哪里边就是谁的指针,如果在Activity中就是Activity,这时等同于Activity.this;如果放在OnCliclListener()中就是OnClickListener()。
activity.this的生命周期就是当前的页面,当前页面销毁掉了,activity也就被销毁,另外this指当前对象,在实际开发工程中有的需要自己指明是哪个activity的对象,要不然编译不通过。
看下他们之间的结构图
从这几个图可以看出 context是一个大的窗口(界面),这个界面的下一级别是 application 再下一级别是 activity.... ,cointext是这几个类的父类,
同样的布局View是所有layout布局中控件的父类。 context和View一个管理窗口一个管理布局显示。