android主线成有looper.loop()为什么不被卡死

参考

http://www.zhihu.com/question/34652589

http://blog.csdn.net/tiandiren2007/article/details/50867589

我说下我的理解:

looper。loop确实是让整个线程陷入死循环了。但是不会卡住。

android程序打开之后我们肯定不会希望它立马退出吧。要维持运行的状态,必须一个死循环。维持他一直运行。

但是在这个looper.loop()里面,不是一直去消息队列里寻找。loop采用的epoll+pipe(模型),有消息就依次执行,没消息就block住,让出CPU,等有消息了,epoll会往pipe中写一个字符,把主线程从block状态唤起,主线程就继续依次执行消息。

所以说在主线程中虽然有一个死循环,但是不会占用cpu,也就不会卡了。

还有一个问题:既然主线程有这个死循环那我们写的代码是怎么执行的呢?

主线程有looper就肯定有handlemessage方法了。这个handlemessage方法里有很多消息的分类.

比如说,启动一个activity,那么主线程会收到一个 LAUNCH_ACTIVITY的消息,looper在loop到这个消息之后,会回调handlemessage方法

在handlmessage方法中对这个类型的msg进行处理(通过一系列的操作最终调用activity的oncreate方法)oncreate执行了。我们写的代码也就执行了。

  其他初始化啊,这些动作我估计差不多也是这个方法。

还有一个问题。主线程会收到的消息是从哪里来的?

http://blog.csdn.net/tiandiren2007/article/details/50867589

主线程的消息又是哪来的呢?当然是App进程中的其他线程通过Handler发送给主线程,请看接下来的内容:



你可能感兴趣的:(android,知识点)