《Android开发艺术探索》第八章Window和WindowManager小结
来源:互联网 发布:沈阳三好街java培训 编辑:程序博客网 时间:2024/06/08 14:32
1. 概述
Window是一个抽象类,具体实现是PhoneWindow,通过WindowManager创建。Window的具体实现位于WMS中,WindowManager和WMS是IPC交互过程。
通过mWindowManager.addView(view, layoutParams);添加一个Window。
Window有三种类型,应用Window(对应Activity),子Window(附属在特定父Window中)和系统Window,z-order层级大的会覆盖在层级小的Window上面。
应用Window的层级范围是1-99,子Window的范围是1000-1999,系统Window的范围是2000-2999。
2. Window内部机制
每一个Window都对应着一个View和一个ViewRootImpl,WindowManger由WindowMangerGlobal实现,内含mViews, mRoots, mParams;
root.setView会通过requestLayout来完成异步刷新请求,内部调用了scheduleTraversals(),然后调用performTraversals,之后依次调用performMeasure,performLayout和performDwaw。
IWindowSession.addToDisplay(IWindow),将Window添加到WMS中,在WMS中会为每个应用保留一个单独的Session。
WindowManager中提供removeView和removeViewImmediate,分别表示异步删除和同步删除。
真正删除View的逻辑在dispatchDetachedFromWindow内部实现:
1)垃圾回收相关工作,比如清除数据和消息、移除回调;
2)通过Session的remove删除Window,最终会调用WMS的removeWindow;
3)调用View的onDetachedFromWindow方法,在其中回收资源、终止动画和停止线程等;
4)在WindowManager中的mRoots,mParams,mDyingViews删除当前View;
3. Window的创建过程
1)在ActivityThread中performLaunchActivity中,通过类加载器创建Activity实例,创建Context,然后调用attach方法;
2)attach中创建Window,设置回调;
3)Window的setContentView方法:创建DecorView,将Activity的布局添加到DecorView中,回调Activity的onContentChanged方法;
4)在handleResumeActivity中会调用Activity的onResume方法,会调用WindowManager的addView方法,将DecorView添加到Window中。
5)在Dialog的构造函数中,会创建Window,设置回调,之后调用setContentView;在show方法中,调用WindowManager的addView方法。创建普通Dialog需要Activity的token,系统Dialog不需要,但要申请权限;
6)Toast也是基于Window实现的,但是Toast具有定时取消功能,所以含有Handler;Toast内部有Toast访问NotificationManagerService和NotificationManagerService回调Toast里的TN接口两类IPC过程;
7)Toast的show方法:调用NMS.enqueueToast(packageName, TN, duration),在NMS中排队完成后会通过TN.show显示,需要从Binder线程切回UI线程;TN.show方法中调用wms的addView。
8)PopupWindow、菜单栏以及状态栏都是通过Window来实现的。
- 《Android开发艺术探索》第八章Window和WindowManager小结
- 《Android开发艺术探索第八章读书笔记》-Window和WindowManager
- 第八章理解Window和WindowManager(Android开发艺术探索)
- Android开发艺术探索——第八章:理解Window和WindowManager
- android艺术开发探索之window和windowmanager
- 理解Window和WindowManager(Android开发艺术探索读书笔记)
- Window和WindowManager(Android开发艺术探索学习笔记)
- Android开发艺术探索读书笔记-理解Window和WindowManager
- 读书笔记-Android开发艺术探索-第8章-理解Window和WindowManager
- 利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记
- 《Android 开发艺术探索》笔记——(8)Window 和 WindowManager
- 《Android开发艺术探索》之学习笔记(八)理解Window和WindowManager
- 开发艺术探索-- Window及WindowManager
- Android开发艺术探索_第八章
- android开发window和windowmanager
- 第八章、理解Window和WindowManager
- 第八章 理解Window和WindowManager
- Window和WindowManager小结
- MNIST的训练
- Java 程序员们值得一看的好书推荐
- Oracle 11g 虚拟列
- Qt(一) Qt入门
- 为什么游戏开发这么累?明明都是自愿的
- 《Android开发艺术探索》第八章Window和WindowManager小结
- Centos7更改网卡名称Eth0
- 数组的总结
- JaveScript 函数,事件
- Android属性动画完全解析(上),初识属性动画的基本用法
- 优秀的计算机编程类博客 和 文章
- iOS_按钮文字图片任意布局,随意定制
- linux日常易忘指令
- USB与IEEE1394的对比