Framework概述

一.框架

1.服务端:

WindowManagerService(wms)和ActivityManagerService(ams);

2.客户端:

ActivityThread:每个App都会有且仅有一个主线程(UI线程)

Activity:最小单位

PhoneWindow:继承与Window,内部包含DecorView(继承FrameLayout),提供窗口操作API

Window:抽象类

DecorView:FrameLayout子类,响应操作

ViewRoot:继承与Handler,wms管理窗口,需要通知客户端进行操作,客户端接收到IPC调用后,会通过ViewRoot把这个调用转换为本地的一个异步调用,内部有W类

W:继承Binder类,wms通过IPC通知客户端,ViewRoot通过W类与wms进行沟通,然后W类给ViewRoot发送一个Handler消息,进行异步处理

WindowManager:客户端和wms的沟通桥梁

3.驱动:

SurfaceFlingger:图像的显示

Binder:跨进程消息传递

二.APK程序运行过程

1.ActivityThread从main()函数执行,调用prepareMainLooper()为UI线程创建一个消息队列(MessageQueue),然后创建一个ActivityThread对象,顺带会创建一个Handler和Binder(ApplicationThread)对象,Binder用于接收远程ams的IPC调用,和ViewRoot中的W类 一样

2.ActivityThread调用Looper.loop()方法,然后ActivityThread接收到ams的指令以后,创建Activity对象,创建PhoneWindow,创建DecorView,创建Activity中相应的View或ViewGroup,在后台创建好了以后,展示在前台就需要wms了,调用WindowManager,创建ViewRoot,以及ViewRoot中的Handler和W,一系列操作以后吧Activity投放到屏幕上了

三.客户端中的线程

会有三种线程,ActivityThread,ApplicationThread,W,第一个是UI线程(主线程),后面两个是Binder,Binder的产生也会同时启动一个新的线程,ActivityThread在创建的时候使用了prepareLooper()方法,所以可以直接创建Handler,因为创建Handler的一个要素就是有么有MessageQueue,prepareLooper()方法就创建了MessageQueue了,所以可以直接通过Handler给ActivityThread发送消息,但是自定义Thread就不行了,因为没有prepareLooper()方法

你可能感兴趣的:(Framework概述)