看前人在好久之前就达到我如今远远不及的高度,这让我以为有些无力。也正是他们趟过的坑能指引我即将前进的路。因此我很庆幸。我庆幸有人指引,我庆幸我在前进。java
本着向大牛学习以及知其然知其因此然的精神,准备有目的、系统性的Read The Fucking Source Code。既看成本身的笔记,也但愿能够帮助部分后来者。android
这是一篇已经阅读的Anroid6.0中Framework源码目录,前期会有顺序、有目的的阅读源码,下一篇多多少少都会和上一篇有些关联,建议先马后看。后续应该会组成一个系列。尽管会有些艰难,仍是但愿本身能坚持下去。Framework,我来了。缓存
本文依据6.0源码,主要分析Zygote进程的启动流程。Zygote进程是Android和Java世界的开创者。在android系统中,全部的应用进程和SystemServer进程都是由Zygote进程fork而来。其重要性因而可知一斑。网络
Zygote进程由init进程启动,SystemServer进程和应用进程由Zygote进程启动。本文依据6.0源码,主要分析SystemServer进程的启动流程。SystemServer进程的做用是启动各类核心服务,例如Installer、ActivityManagerService、WindowManagerService、PowerManagerService等等。异步
- 点击桌面Launcher图标后作了哪些工做?
- 应用程序何时被建立的?
- Application和MainActivity的onCreate()方法何时被调用的?
本文依据Android6.0源码,从点击Launcher图标,直至解析到MainActivity#OnCreate()被调用。工具
在Activity中通常第一句就是调用setContentView(R.layout.XXX),但这其中系统作了那些工做?咱们知道,在ClassLoader装载了MainActivity以后,首先建立了Application,以后依次调用Application对象的onAttach和onCreate()方法。而后顺序调用第一个Activity的onAttach和onCreate()方法。oop
在Activity#setContentView()中会调用PhoneWindow#setContentView()。而在PhoneWindow#setContentView()中有这么一句mLayoutInflater.inflate(layoutResID, mContentParent)。这行代码的做用是将咱们的activity_main.xml填充到mContentParent中去。详见:setContentView源码解析。在写adapter的时候,也常常写mInflater.inflate(layoutResID, null)。那么,这行代码怎么就将xml文件转换成了View或者ViewGroup了呢?布局
Toast中你所不知道的那些细节学习
Activity各个方法是何时被调用的?史上最简单也是最详细的Activity启动流程源码解析spa
极度的简单每每是繁琐的假象。
你真的会用AsyncTask吗?
自定义View必看的顶级视图DecorView
一、特别适合数据量小,通讯频繁的网络操做。
二、扩展性强。Volley 中大可能是基于接口的设计,可配置性强。
三、必定程度符合 Http 规范,包括返回 ResponseCode(2xx、3xx、4xx、5xx)的处 理,请求头的处理,缓存机制的支持等。并支持重试及优先级定义。
四、默认 Android2.3 及以上基于 HttpURLConnection,2.3 如下基于 HttpClient 实现。
五、提供简便的图片加载工具。总之Volley就是很牛逼啦!
ThreadLocal不是一个具体的线程。它是一个线程内部的数据存储类,经过它能够再指定的线程中存储数据,数据存储之后,只有在指定线程中能够获取到存储的数据,对于其它线程来讲则没法获取到数据。
Android异步消息机制分析。消息是怎么传递的?异步又是如何实现的?在看此文章以前建议不太了解ThreadLocal的读者先了解下上一篇文章《ThreadLocal源码浅析》,在后文中会有所涉及。