Android 程序的运行过程
来源:互联网 发布:淘宝怎么秒杀成功 编辑:程序博客网 时间:2024/05/17 23:48
- 首先,ActivityThread从main()函数中开始执行,调用prepareMainLooper()为UI创建一个消息队列(MessageQueue)。
- 然后创建一个ActivityThread对象,在ActivityThread的初始化代码会创建一个H(Handler)对象和一个ApplicationThread(Binder)对象。其中Binder负责接收远程AMS的IPC调用,接收到调用后,则通过Handler把消息发送到队列,UI主线程会异步地从消息队列中取出消息并执行相应的操作,比如start、stop、pause等
- 接着UI主线程调用Loop.loop()方法进入消息循环体,进入后就会不断的从消息队列中读取并处理消息。
- 当Activity接收到AMS发送的start某个Activity后,就会创建指定的Activity对象,Activity又会创建PhoneWindow类->DecorView类->创建相应的View或者ViewGroup。创建完成后,Activity就需要把建好的界面显示在屏幕上,于是调用WindowManager类,后者于是创建一个ViewRoot对象,该对象实际上创建了ViewRoot类和W类,创建ViewRoot对象后,WindowManager再调用WMS的远程接口完成添加一个窗口并显示到屏幕上。
- 接下来,用户开始在程序界面上操作,KeyQ线程不断地把用户消息存储到QueueEvent队列中,InputDispatcherThread线程逐个取出消息,然后调用WMS中相应函数处理该消息。当WMs发现该消息属于客户端某个窗口时,就会调用相应的窗口W接口。
- W类是一个binder,负责接收WMS的IPC调用,并把调用消息传递给ViewRoot,ViewRoot再把消息传递给UI主线程ActivityThread,ActivityThread解析该消息并做相应的处理。在客户程序中,首先处理消息的是DecorView,如果DecorView不想处理某个消息,则可以将消息传递给内部包含的子View或者ViewGroup,如果还没处理,则传递给PhoneWindow,最后传递给Activity。
阅读全文
0 0
- Android 程序的运行过程
- Android程序运行过程
- 程序的运行过程
- 【android内核剖析笔记】APK程序的运行过程
- C#程序的运行过程
- apk程序的运行过程
- 窗口程序的运行过程
- ios程序的运行过程
- apk程序的运行过程
- APK程序的运行过程
- Flex程序的运行过程
- apk程序的运行过程
- x86程序的运行过程
- java程序的运行过程
- APK程序的运行过程
- Java程序的运行过程
- APK程序的运行过程
- APK程序的运行过程
- 某公司要开发”天天灌水论坛”,请使用面向对象的思想,设计注册用户信息
- Java中的equals();
- MySql事务隔离级别是啥?
- 整数快速幂-归纳法
- JS ES6箭头函数
- Android 程序的运行过程
- JS里的事件委托
- 2017暑期ACM俱乐部个人训练赛第3场 7.28
- eclipse安装Gradle插件
- Unity里的Mesh属性
- 机器学习精简教程之二——用scikit-learn求解一元线性回归问题
- C语言——实例032 Press any key to change color, do you want to try it. Please hurry up!
- java中两个Integer类型的值相比较的问题
- group by 和count