android应用的启动流程原理
来源:互联网 发布:黑页网站源码 编辑:程序博客网 时间:2024/06/05 11:20
首先,ActivityThread从main()函数中开始执行,调用prepareMainLooper()为UI线程创建一个消息队列(MessageQueue)。
然后创建一个ActivityThread对象,在ActivityThread的初始化代码中会创建一个H(Handler)对象和一个 ApplicationThread(Binder)对象。其中Binder负责接收远程AmS的IPC调用,接收到调用后,则通过Handler把消息 发送到消息队列,UI主线程会异步地从消息队列中取出消息并执行相应操作,比如start、stop、pause等。
接着UI主线程调用Looper.loop()方法进入消息循环体,进入后就会不断地从消息队列中读取并处理消息。
当 ActivityThread接收到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。
- android应用的启动流程原理
- android应用的启动流程
- android应用的启动流程
- android应用的启动流程
- android应用的启动流程
- Android应用启动的流程
- Android应用的启动流程
- Android应用的启动流程
- android应用启动流程
- Android应用启动流程
- Android 应用启动流程
- android 应用的启动流程分析
- Android的应用(APP)启动详细流程
- 分析Android中应用的启动流程
- 分析Android中应用的启动流程
- Android的应用(APP)启动详细流程
- 应用的启动流程
- Android 应用进程启动流程
- python学习计划
- Ubuntu下NAOqi C++ SDK环境配置与程序的烧录
- WinToHDD Enterprise(Windows系统重装工具)官方中文版V2.8下载 | wintohdd 注册机
- MongoDB Notes
- build_release/cuda/src/caffe/solvers/nesterov_solver.o
- android应用的启动流程原理
- 妹子图 Python 爬取
- NEUQACM OJ 1836
- spark搭建
- 引用类型和值类型(装箱和拆箱)
- 最小堆实现优先队列解决修理牧场(c/c++)
- 小班研讨课
- 数据库连接工具将结果集封装成map或List<Map>
- mysql乐观锁总结和实践