美文网首页
应用的启动过程以及handler,MessageQueue,Lo

应用的启动过程以及handler,MessageQueue,Lo

作者: 没风的地方 | 来源:发表于2017-12-12 17:46 被阅读3次

android应用是由activity组成的,应用的启动过程其实就是某个activity的启动过程,是哪个activity呢,没错,就是你想的那样,是这个:

应用启动其实就是启动manifest中指定为MAIN的activity

四八四很熟悉,最初的感动啊,那么让我们继续。

1 指定为main,其实说白了就是有了java中的应用程序入口main()。

2 从main()方法开始执行

启动源码

从图中可以看出,进入到main()方法后,首先会获取一个Looper对象,Looper对象会获取一个MessageQueue对象,也就是说,一个系统会为一个应用维护一个Looper和MessageQueue。

创建activityThread,也就是应用程序主线程。主线程承载着Looper和MessageQueue的运作。

在主线程中,MessageQueue是一个消息队列,Looper管理这个队列,也就是说当程序一经启动,就进入到了一个无限循环当中。

Looper管理着MessageQueue,控制着Message在MessageQueue的出入,handler通过sendMessage可以把一个Message放入到MessageQueue当中,也可以使用handleMessage来获取MessageQueue的一个Message。(入队:queue.enqueueMessage(msg, uptimeMillis),出队:msg.next。)。

在进行耗时操作的时候,为了不阻塞主线程,都会开启子线程,子线程和主线程最常见的交互就是更新UI,因为UI是运行在主线程中的,所以子线程是无法操作的,这是可以通过handle把消息传递到主线程,从而进行相应操作,当然还有其他方式。

启动应用程序时,创建了线程之后是的looper循环起来才能通过handler传递消息才能完成Application的主线程创建的。

参考了:http://www.jianshu.com/p/36a978b6cacc,感谢作者。

相关文章

网友评论

      本文标题:应用的启动过程以及handler,MessageQueue,Lo

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