最近在看一本挺有名的书,对里面讲到的关于window的概念不完全认同,在这里写下自己的理解。
类名|理解|比喻
:-:|:-
view | android中最基本的可视元素 | 图象
viewRootImp |正如名字那样,是很多View的行为的发起点,如measure, layout, draw...|胶片
window |phoneWindow是window的唯一实现类,一堆视图功能的集合,有转场动画等|美化工具
windowManager |android提供的一个添加/更新/移除视图的简单入口,只要将 view 传入 windowManager.addView()方法中,就可以在屏幕中展示该view|放映机
书中还介绍了 session, windowManagerService,在我看来都是比 windowManager 更底层的内容而已。
书中描述,将一个 view 塞到 windowManager 中,就添加了一个 window。我个人觉得这样的说法特别让人困惑,因为 window 本身在 android 中是个有精确作用的类,而作者描述的像是他个人的一种概念,用的又是一样的名字。总之我是花了很久才绕出来。
Activity跟Dialog在创建视图的时候,是会 new phoneWindow()的,我认为他们才真正具有 "window",就算new phoneWindow出来了,如果不将依赖的view塞到windowManager中,屏幕上是看不到内容的;而Toast虽然也有通过windowManager新建可视化视图,但我不认为那个是 "window"。
总之,要在屏幕上展示东西,只有 view 跟 windowManager 是必须的(viewRootImp也可以说是必须的,不过是个中间产物,不需要自己生成),而 window 只在特殊的场景下需要,不是必须的。
网友评论