Framework概述
来源:互联网 发布:热电材料 知乎 编辑:程序博客网 时间:2024/06/06 13:11
Framework框架,同样包含三个部分:服务端、客户端和Linux驱动。
服务端包含两个重要的类
ActivityManagerService.java 管理应用程序中的Activity
WindowManagerService.java 管理窗口
客户端中重要的类
ActivityThread类,所在线程即为UI线程
DecorView类是FrameLayout的子类,并且是PhoneWindow的内部类,可添加ActionBar,响应特定的按键消息。
Window类提供了一组通用的窗口操作API
PhoneWindow类继承于Window类,内部包含一个DecorView对象
ViewRoot类继承于Handler,其作用是把WMS的IPC调用转换为本地的一个异步调用,每创建一个窗口,都会相应的生成一个ViewRoot对象,用以和WmS进行交互
W类也是继承于Binder,并且是ViewRoot的一个内部类,WmS通知客户端窗口,是通过调用W类把消息发送个ViewRoot,以便进行异步处理
View类是WMS认为的窗口,本身不能接收WmS传递过来的消息,真正接收用户消息是ViewRoot.W类,每个W类都包含了一个View变量
WindowManager类是客户端和WmS交互的中介
APK运行过程
ActivityThread从main()函数开始, 调用prepareMainLooper()为UI线程创建一个消息队列,然后创建一个ActivityThread对象,负责接收AmS的IPC调用。
public static final void main(String[] args) { SamplingProfilerIntegration.start(); Process.setArgV0("<pre-initialized>"); Looper.prepareMainLooper(); if (sMainThreadHandler == null) { sMainThreadHandler = new Handler(); } ActivityThread thread = new ActivityThread(); thread.attach(false); if (false) { Looper.myLooper().setMessageLogging(new LogPrinter(Log.DEBUG, "ActivityThread")); } Looper.loop(); if (Process.supportsProcesses()) { throw new RuntimeException("Main thread loop unexpectedly exited"); } thread.detach(); String name = (thread.mInitialApplication != null) ? thread.mInitialApplication.getPackageName() : "<unknown>"; Slog.i(TAG, "Main thread of " + name + " is now exiting"); }
当ActivityThread接收到启动某个Activity的IPC命令后,则会创建一个activity对象,接着Activity创建PhoneWindow类->DecorView类->View类,最后显示到屏幕上。
W类负责接收WmS的IPC调用,再把消息传递给ViewRoot,ViewRoot再把消息传递给ActivityThread,ActivityThread做解析后,转给DecorView处理,如果DecorView不处理,再转给其内部的View处理,如果还没处理,则传给PhoneWindow,最后再传递给Activity。
ViewRoot类和W类是何时创建的,待更新。
- Framework概述
- FrameWork概述
- .NET Framework概述
- .NET Framework概述
- .NET Compact Framework 概述
- Spring Framework概述(1)
- Spring Framework概述(2)
- 1 .NET FrameWork概述
- .NET Compact Framework 概述
- .NET Framework 概念概述
- .NET Framework概述
- NET Framework概述
- (二)Android Framework概述
- Android FrameWork概述
- Android 系统framework 概述
- Android系统framework概述
- .NET Compact Framework 概述
- EFI Framework概述
- Objiective-C入门学习--------武器类
- HTTP协议与HTML表单 (包含GET与POST的区别)
- python、ruby对比
- 一句话
- 跨Linux和Windows的C编程杂记
- Framework概述
- 得到一个BitMap对象
- psql 小结
- libmemcached的头文件
- 用rosserial创建一个subscriber
- OCP-1Z0-052-V9.02-115题
- oralce从第一位不是0的数据开始截取字符串
- c++入门<一>
- ORACLE删除正在链接的用户