Q1:Activity、View、Window三者之间的关系?
Q2:Window有哪几种类型?
Q3:Activity创建和Dialog创建过程的异同?
Q1:Activity、View、Window三者之间的关系?
Android Activity 、 Window 、 View之间的关系
Q2:Window有哪几种类型?
Window有三种类型:
- 应用Window:对应一个Activity。
- 子Window:不能单独存在,需附属特定的父Window。如Dialog。
- 系统Window: 需申明权限才能创建。如Toast。
- Window是分层的,见下表。
- 层级大的会覆盖在层级小的Window上面。
- 对应WindowManager.LayoutParams的type参数。
Q3:Activity创建Window过程和Dialog创建Window过程的异同?
Window的创建过程
由于View必须依附Window才能呈现出来,因此有View的地方必有Window。在Android中可以提供View的地方有Activity、Dialog和Toast,下面分别来看以上三种Window的大致创建过程:
a.Activity的Window创建过程
b.Dialog的Window创建过程
Step1:创建WindowDialog。和Activity类似,同样是通过PolicyManager.makeNewWindow()来实现。
Step2:初始化DecorView并将Dialog的视图添加到DecorView中去。和Activity类似,同样是通过Window.setContentView()来实现。
Step3:将DecorView添加到Window中显示。和Activity一样,都是在自身要出现在前台时才会将添加Window。
- Dialog.show()方法:完成DecorView的显示。
- WindowManager.remoteViewImmediate()方法:当Dialog被dismiss时移除DecorView。