腾飞网络

青岛网站制作 我们致力于打造一个优秀的建站资源共享学习平台

栏目简介

 很多读者,尤其是初学者特别抗拒去看源码,这里我说明一下为什么要进行源码分析。其中包括下面一些好处: 学习Android源码有助于我们学习其中的设计模式、思想、架构。熟悉整个源码的架构,有助于我们更加正确地调用Android提供的SDK,写出高效正确的代码学习源码有助于我们面试,因为大公司都喜欢问这些。学习源码有助于我们学习一些黑科技,比如学习插件化的从时候我们需要学习Hook机制,但是学习Hook机制的时候我们需要掌握Activity的启动流程、消息机制等等机制。 我个人觉得,只懂得去调用API,跟掌握API底层的实现,这是一个码农跟高级工程师的区别。只会用API每天只能做很多重复性的工作,但是学习了源码以后,我们能够做到很多原生API做不到的事情,这就是我们所说的黑科技,这样能够让我们的知识面更加广泛,因为,即使一个人天资再好也罢,如果他的见识面不够广泛,很多东西(比如说热更新、插件化、NDK)没有接触过的话,永远只能停留在他所到达的瓶颈上面。 对于像本人一样在做系统APP、系统Framework层开发和定制来说源码可能比较重要,但是这并不意味着做第三方APP的时候就不重要。当然,学习源码需要有一定的耐心,也可能需要你在分析的过程中去画一些图(图片更加直观)、花额外的时间去学习源码用到的设计模式等等,学习源码是一个比较痛苦的事情,因为你会发现掌握了源码并不意味者你就能够一步登天。但是随着亲们慢慢地掌握了整个Android的系统架构的时候,相信你不会后悔当初自己的付出。因为我一直都相信,付出必定会有所收获。这里扯个题外话,刚刚提到NDK,我觉得NDK也是一块比较重要的模块,它能够利用C/C++来实现Java实现不了,或者用Java去实现的时候效率很低的事情,比如说QQ的变声功能、全民K歌的音频混合、视频处理、直播等等,所以有时间的话我将会写一些关于NDK的文章。 应用程序的入口分析 应用程序的入口是 在ActivityThread 的 main 方法中的(当应用程序启动的时候,会通过底层的C/C++去调用main方法),这个方法在 ActivityThread类 的最后一个函数里面,核心代码如,在分析源码的时候,你可能会发现一些 if(false){} 之类的语句,这种写法是方便调试的,通过一个标志就可以控制某些代码是否执行,比如说是否输出一些系统的Log。在 main 方法里面,首先初始化了我们的 Environment对象,然后创建了 Looper,然后开启消息循环。根据我们的常识知道,如果程序没有死循环的话,执行完 main函数(比如构建视图等等代码)以后就会立马退出了。之所以我们的APP能够一直运行着,就是因为 Looper.loop() 里面是一个死循环:为什么需要这样一个消息机制我们知道每一个应用程序都有一个主线程,主线程一直循环的话,那么我们的自己的代码就无法执行了。而系统在主线程绑定一个 Looper 循环器以及消息队列,Looper 就像是一个水泵一样不断把消息发送到主线程。如果没有消息机制,我们的代码需要直接与主线程进行访问,操作,切换,访问主线程

相关栏目推荐

相关标签云

百强互联网公司重点在创新、转型与整合
photo blog 2018-11-01 青岛网站制作

百强互联网公司重点在创新、转型与整合

今年,百强互联网公司重点在创新、转型与整合、产业服务等方面,主要表现出六个特点:

淄博企业网站建立引见
photo blog 2018-10-23 青岛网站制作

淄博企业网站建立引见

淄博企业网站建立引见

中国互联网络停滞回忆 中华网第一赴美经济公司 | 北晚新听觉
photo blog 2018-10-23 青岛网站制作

中国互联网络停滞回忆 中华网第一赴美经济公司 | 北

中国互联网络停滞回忆 中华网第一赴美经济公司 | 北晚新听觉

营口房地产网站建立计划
photo blog 2018-10-23 青岛网站制作

营口房地产网站建立计划

营口房地产网站建立计划

业精于专 浙江大力智能工具人沙盘举升车出版
photo blog 2018-10-23 青岛网站制作

业精于专 浙江大力智能工具人沙盘举升车出版

业精于专 浙江大力智能工具人沙盘举升车出版

药品保险让生涯更美妙 2018湖北药品保险宣扬周正式发动
photo blog 2018-10-23 青岛网站制作

药品保险让生涯更美妙 2018湖北药品保险宣扬周正式发

药品保险让生涯更美妙 2018湖北药品保险宣扬周正式发动