Android Window 理解

Window概念

Window是一个抽象类,它的唯一实现类是PhoneWindow,Android中的所有视图都是通过Window来呈现的。WindowManager则为Window的管理者,负责添加,删除,更新window中的View。
Window可以理解为画板,View是具体的画,WindowManager是画笔或橡皮檫。View必须依附于画板,并可以通过WindowManager进行添加,插除和更新具体的画。

Window 的三种类型

  • 应用 Window
    应用Window需要对应一个Activity
  • 子 Window
    子Window不能单独存在,需要依附在父Window上,比如Dialog就是一个子Window
  • 系统 Window
    系统Window需要声明权限才能创建,比如Toast和系统状态栏都是系统Window

WindowManager

我们对 Window 的操作是通过 WindowManager 来完成的,WindowManager 是一个接口,它继承自只有三个方法的 ViewManager 接口:

public interface ViewManager {
    public void addView(View view, ViewGroup.LayoutParams params);
    public void updateViewLayout(View view, ViewGroup.LayoutParams params);
    public void removeView(View view);
}

Activity通过WindowManager提供的三个方法间接对View进行管理, 即添加 View、更新 View 和删除 View。

Window创建过程

window的创建是在LaunchActivity第四步attach方法中调用PolicyManager.makeNewWindow进行的。

mWindow = PolicyManager.makeNewWindow(this);
public Window makeNewWindow(Context context){
    return new PhoneWindow(context);
}

Activity视图是通过setContentView依附到Window上的。

public void setContentView(int layoutResID) {
    getWindow().setContentView(layoutResID);
    initWindowDecorActionBar();
}

phoneWindow的setContentView代码步骤:
1.如果没有DecorView则创建它,DecorView是Activity的顶级View,是一个FrameLayout
2.将View添加到DecorView的content区域
3.回调Activity的onContentChanged方法通知视图已改变
4.handleResumeActivity中调用makeVisible()方法将decorView加入到WindowManager中并设置为可见

Activity Window View 关系

Activity是画架,画架上挂着画板
Window是画板,画板上有具体的画(View)
View是具体的画。View必须画在画板上,并可以通过画笔或橡皮檫(WindowManager)进行添加,插除和更新的图画。

Window是连接Activity和view的桥梁。Activity里有一个phoneWindow对象,phoneWindow里面实现了DectorView,Activity调用setcontentView把view放置在DectorView的Content区域,这样view就关联到activity上了。

发布了13 篇原创文章 · 获赞 1 · 访问量 5345
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览