Android Window,DecorView,Context,getApplication(),getContext(),activity.this 的一个概念认识

本文探讨了Android开发中Window、DecorView和Context的概念。Window作为Activity的窗口,其具体实现是PhoneWindow,由WindowManagerService管理。DecorView作为顶级View,包含了Activity的布局。Context包括application、activity和service三种类型,各有特定用途。getApplication()和getApplicationContext()返回应用实例,activity.this代表当前Activity的上下文,而getContext()通常返回当前View所属的activity上下文。此外,Activity、Service和Application是ContextWrapper的子类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 一个Activity包含了一个Window,Window才是真正代表一个窗口.

DecorView是一个顶级View,内部会包含一个竖直方向的LinearLayout,这个LinearLayout有上下两部分,分为titlebar和contentParent两个子元素,contentParent的id是content,而我们自定义的Activity的布局就是contentParent里面的一个子元素。View层的所有事件都要先经过DecorView后才传递给我们的View。

 

2.Context是上下文:有三个子类:application,activity,service.

许多功能都要用到Context,大部分功能三种context子类都可以用,少部分情况用特定context

getApplication()getApplicationContext()都是获得application的实例

activity.this是获取当前activity的上下文环境

getContext()返回当前view的上下文环境,通常为当前activity的上下文

 

3.ContextWrapper是Context的子类

而Activity、Service、Application也都是ContextWrapper的直接子类或间接子类

 

image

4.Window是一个抽象类,具体实现是PhoneWindow,创建Window可以通过WindowManager,Window的具体实现在WindowManagerService中, WindowManager和WindowManagerService的交互是一个IPC过程,所有的View都是附加在Window上,Window也是View的直接管理者.

每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立联系,Window并不是实际存在的而是以View的形式存在,对Window的访问要通过WindowManager

 

Window分三类:应用Window,子Window,系统Window

应用层级对应着一个Activity,子Window要附属在特点父Window上,例如一个Dialog就是一个子Window,系统Window要声明权限才能创建,例如Toast和系统状态栏

层级大的覆盖在层级小的上面,层级分别为1-99,1000-1999,2000-2999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值