对android上下文和窗口的理解

context:


Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)

1、它描述的是一个应用程序环境的信息,即上下文;可以理解成“运行环境”:它提供了一个应用运行所需要的信息,资源,系统服务等;同样可以理解成,用户操作和系统交互这一过程就是一个场景,比如Activity之间的切换,服务的启动等都少不了Context。

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一个管理窗口一个管理布局显示。

3.Context应用场景

虽然Application,Activity,Service的祖先都是Context,并不是每个Context对象都是相同的。

  • Application:一个应用在创建的时候只会创建一个ActivityThread主线程,而在初始化ActivityThread主线程的时候就会创建一个Application对象。Application是全局的,在Activity和Service里都可以调用getApplication方法来获得一个应用的Application对象。Application的父类是ContextWrapper类。
  • **Service:**Service父类是ContextWrapper,一个应用每创建一个Service,都会创建一个ContextImpl类去关联Service。
  • **Activity:**Activity父类是ContextThemeWrapper,而ContextThemeWrapper父类是ContextWrapper。ContextThemeWrapper类是其父类的扩张,里面额外添加了关于主题设置的一些方法。在ActivityThread主线程中创建Activity的时候我们知道,创建完了Activity之后会立马调用Activity#setTheme设置Activity的主题。

不同Context的应用场景如下图标

功能 Application Service Activity
Start an Activity NO1 NO1 YES
Show a Dialog NO NO YES
Layout Inflation YES YES YES
Start a Service YES YES YES
Bind to a Service YES YES YES
Send a Broadcast YES YES YES
Register BroadcastReceiver YES YES YES
Load Resource Values YES YES YES


4.Activity Window View之间的三角关系

我们打开IDE创建一个Activity,IDE会自动帮我们生成一些代码,然后一个空的Activity界面就展示出来了。这一看似简单的问题,实则包含了很多内容,这一过程包含了Activity Window View三者之间复杂的三角关系,在这一流程中Activity是整个模型的控制单元,Window属于承载模型,负责承载视图,View是视图显示模型。


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     }   
    }


参考链接  http://blog.csdn.net/feiduclear_up/article/details/47356289

http://www.jianshu.com/p/a533467f5af5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值