Framework 之 内核剖析 读笔


Framework定义了客户端组建和服务端组建功能接口.

Framework框架中主要包含三个部分: 服务端、客户端Linux.


关于服务端:

  服务端有两个重要的类, WindowManagerService(WMS)、ActivityManagerService(AMS).

  WMS 主要作用是 按照顺序叠放各个窗口.隐藏、显示. 

  AMS  主要作用是管理所有的Activity类.


  除此之外服务端还包含另外两个类:

   KeyQ类:该类为WMS的内部类. 集成于KeyInputQueue类, KeyQ对象一旦创建,就会开启一个线程. 该线程会不断读取UI操作消息,如按键、触屏等等.. 并把这些消息放到消息队列QueueEvent中.

  InputDispatcherThread类:  该类对象一旦创建, 也会启动一个线程, 不断从QueueEvent中获取消息,并进行一定的过滤,最后发送给当前活动的客户端程序中.


关于客户端:客户端主要包含以下类

 ActivityThread类:该类为应用程序主线程,所有APK仅有一个ActivithThread类,程序的入口为该类的 static main()中,ActivityThread类所在线程即为UI线程(主线程)


 Activity类:为APK中最小运行单元(主线程动态加载可执行代码). 一个APK中可以包含多个Activity,ActivityThread会根据用户操作来进行加载


PhoneWindow类: 该类继承于Window类. PhoneWindow内 包含一个DecorView, DecorView继承于FrameLayout.So~,PhoneWindow内含一个View类. 并且提供一组通用窗口API操作


Window类: 该类提供一组通用的窗口(Window)操作API,WMS所管理的窗口并不是 Windows类,而是一个VIEW或者VIEWGROUP,好比PhoneWindow内的DecorView.


DecorView类:该类继承于FrameLayout,Decor 全称 Recoration ,即“修饰”. 该类作用就是给FrameLayout加点修饰,比如添加个titleBar什么的...


ViewRoot类:WMS管理窗口时, 需要通知客户端进行特定操作, 这些操作都是通过IPC调用完成的. 而客户端在收到IPC调用后,都会转换成一个异步调用. 实现的方式就是使用Handler,ViewRoot继承Handler, 其主要作用就是把 IPC 转换成异步调用.


W类: 该类继承于Handler,并且是ViewRoot内部类,Wms通知客户端窗口时,是通过IPC调用,也就是用到该Binder类,然后该类内部处理函数会发送消息给ViewRoot类发送一个Handler消息,以便处理


WindowManager类:客户端需要创建一个窗口,窗口是由WMS完成的, 但是和WMS打交道的就是WindowManager类.有什么需求跟WM说, 由它和WMS进行交互.


Linux驱动:

  Linux驱动在Frameworkd相关主要有两个部分:SurfaceFlingger 和Binder . Binder作用是跨进程通讯



关于APK运行过程

  首先,ActivityThread 从main()开始执行,调用prepareMainLooper() 为UI线程创建一个消息队列(MessageQueue)

   然后创建一个ActivityThread对象,ActivityThread 会在初始化时创建一个 Handler(H) 和ApplicationThreadNative(Binder)对象, binder对象负责远程AMS 的IPC调用, 通过Handler把消息发送到消息队列,UI线程会异步从消息队列将消息去除 执行相应操作,比如 start,pause,destory等. 接着UI线程执行Loop.loop(). 不断从消息队列中取出消息.

    ActivityThread接受到start某个activity时,就会创建指定的Activity,然后创建PhoneWindow->DecorView->相应View或ViewGourp. 创建完成后,Activity需要把创建好的界面显示到屏幕上,这时调用WindowManager类, WM会创建一个ViewRoot对象,内包含W(Handler)类.创建完成后, WM会调用远程 WMS的方法将窗口显示到屏幕上.

  之后用户在屏幕上开始操作, KeyQ类不断收集触碰等信息 存放到QueueEvent中,  InputDispatcherThread不断从QueueEvent中取出消息,然后调用Wms相应函数处理消息.当WMS发现该消息属于客户端某个窗口时,就会被调用相应窗口的W类.

 W类是一个Binder,负责接口WMS的IPC调用,并把消息传递给ViewRoot,ViewRoot把消息传给ActivityThread,ActivityThread接受消息并作出相应处理.在客户端中,DecorView首先处理消息,如果DecorView不想处理,那么会传递给内部包含的View或ViewGroup,如果还没处理,则传给PhoneWindow.最后传递给Activity



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值