美文网首页
Android应用的整体运行过程(这篇当做guideline)

Android应用的整体运行过程(这篇当做guideline)

作者: Fakecoder_Sunis | 来源:发表于2018-05-03 14:53 被阅读0次
    android_logo.jpeg

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

    然后创建一个ActivityThread对象,ActivityThread的初始化过程会创建一个H(Handler)对象和一个ApplicationThread(Binder)对象。Binder对象负责接收远程Ams的IPC调用,接收到消息后,通过Handler对象将消息发送到队列,UI线程则会异步的在队列中取出消息并执行响应操作。

    然后UI主线程会调用Looper.loop()方法进入循环体,然后就在MessageQueue中不断的去除并处理消息。

    ActivityThread main方法 ActivityThread属性的初始化 H类 H(handler)类处理消息 Application类及其方法

    当ActivityThread接收到Ams发送start某个Activity时,会指定创建Activity对象。Activity会创建PhoneWindow类->DecorView类->创建响应的ViewGroup或View。创建完后,Activity调用WindowManager将创建好的界面显示到屏幕上,WindowManager则会创建一个ViewRoot对象和W(Binder)对象。创建好ViewRoot类后,WindowManager再调用Wms提供的远程接口完成添加一个窗口并显示到屏幕上。

    接下来,用户开始操作手机屏幕。KeyQ线程会不断的把用户消息存储到QueueEvent队列中,InputDispatcherThread则逐个将消息取出,然后调用WmS的相应方法处理消息。但Wms发现一个消息属于某个客户端窗口时,就对调用该窗口的W类接口。

    前面说到W类是一个Binder,负责接受WmS的IPC调用,并把消息传给ViewRoot,ViewRoot再把消息传递给UI主线程的ActivityThread,最后ActivityThread解析并处理消息。

    在客户端中,首先处理消息的事DecorView,如果DecorView不处理消息,则将消息传递给其内部包含的ViewGroup或View。如果还没有处理,则交给PhoneWindow处理,最火传递给Activity。

    未完待续......

    相关文章

      网友评论

          本文标题:Android应用的整体运行过程(这篇当做guideline)

          本文链接:https://www.haomeiwen.com/subject/kqwkrftx.html