【Android开发】Android中的context

Android中的context

参考:https://www.jianshu.com/p/94e0f9ab3f1d

Activity mActivity =new Activity()

Activity mActivity =new Activity()

Activity可以new吗?不能。

Android程序不像Java程序一样,随便创建一个类,写个main()方法就能运行;

Android应用模型是基于组件的应用设计模式,组件的运行要有一个各自特定的Context环境,在这个Context环境下,Activity、Service等组件才能正常工作。
这些组件并不能采用普通的Java new的方式 创建对象实例。

通俗理解Context

可以将Context理解为“场景”

一个Android应用程序,可以类比为一部电影,Activity,Service,Broadcast Receiver,Content Provider这四大组件就好比是这部戏里的四个主角:胡歌,霍建华,诗诗,Baby。他们是由剧组(系统)一开始就定好了的,所以这四位主角并不是大街上随随便便拉个人(new 一个对象)都能演的。

演员必须工作在镜头(Context)下,也就是说四大组件(四位主角)必须工作在Context环境下(摄像机镜头下)。

而Button,TextView,LinearLayout这些控件,就好比是这部戏里的群众演员,他们显然没有这么重要,随便一个路人甲路人乙都能演(可以new一个对象),但是他们也必须要面对镜头(工作在Context环境下),所以Button mButton=new Button(Context)是可以的。

一个应用程序有几个Context

图片名称
Context类本身是一个纯abstract类

Context的两个子类分工明确,
其中ContextImpl是Context的具体实现类,
ContextWrapper是Context的包装类。
Activity,Application,Service虽都继承自ContextWrapper(Activity继承自ContextWrapper的子类ContextThemeWrapper),但它们初始化的过程中都会创建ContextImpl对象,由ContextImpl实现Context中的方法。

从上面的关系图可以看出,在应用程序中Context的具体实现子类就是:Activity,Service,Application。那么Context数量=Activity数量+Service数量+1

可能会有疑问:我们常说的四大组件,这里怎么只有Activity和Service持有Context,那Broadcast Receiver和Content Provider呢?Broadcast Receiver,Content Provider并不是Context的子类他们所持有的Context,都是其他地方传过去的,所以并不计入Context总数。

上面的关系图,也从侧面告诉我们,Context类在整个Android系统中的地位是多么的崇高,因为Activity,Service,Application都是其子类。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值