apk程序的运行过程

APK程序的运行从ActivityThread的main()开始,创建UI线程的消息队列。ActivityThread初始化时创建Handler和ApplicationThread(Binder)。UI线程进入消息循环,处理包括启动Activity在内的各种操作。当启动Activity时,会创建Activity对象及其视图层次,通过WindowManager和W类(Binder)将界面显示到屏幕。用户交互时,KeyQ线程和InputDispatcherThread处理输入事件,通过Binder回调给UI主线程进行处理。客户端程序包含至少3个线程:UI主线程、ApplicationThread(AmS IPC)和ViewRoot.W(WmS IPC)。自定义线程无法直接创建Handler,但可以向UI线程发送消息。
摘要由CSDN通过智能技术生成

apk程序的运行过程

    首先,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队列中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值