Android面试题:Window

Q1:Activity、View、Window三者之间的关系?
Q2:Window有哪几种类型?
Q3:Activity创建和Dialog创建过程的异同?

Q1:Activity、View、Window三者之间的关系?

Android Activity 、 Window 、 View之间的关系

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。

猜你喜欢

转载自blog.csdn.net/songzi1228/article/details/82801995