美文网首页
Framework概述

Framework概述

作者: twohuoone | 来源:发表于2017-09-14 16:45 被阅读6次

    一.框架

    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概述

          本文链接:https://www.haomeiwen.com/subject/zqbdsxtx.html