# 前言

一直想写一本好书。

在这之前，因为在CSDN博客比较活跃，所以有几位编辑找我商量写书的事情，然而我自己最清楚自己的技术水平，感觉沉淀太少，时机还未到，即使真写出来，也不过是误人子弟，浪费纸张，无太大价值。

但是后来我又一想，能不能趁着这个机会把自己的知识体系整理和提升一下呢？现在的网络传播这么快，写一本电子书也是很不错的呀！既能够整理一下这一段时间的学习心得，也能够把一些知识深入一下，虽然看了好多的技术文章，但是理解很肤浅，正好可以再次深入一下！

于是，我打算写这样一本电子书了！

在我心目中，一本好书的定义是这样的：

1. 看完要让人有收获，不管大小，这是一本书的最基本的价值
2. 书的内容读起来应该让人畅快淋漓，不管是措辞、语句、代码格式，还是在内容的选题上，每一章都应该有一个明确的主题，读完一章就有一章的收获
3. 如果能在内容之中穿插着一些学习技巧、学习经验、项目经验，那就再好不过了！

从题目上你可以看出这本书的主题内容就是Android中的"重难点"，这里的重难点并不是说内容晦涩，而是指那些在Android开发中接触的比较多的知识点，这些知识点的使用方法很简单，但是在其背后却隐藏着很大的秘密。学习Android开发，不应该只学会使用某些知识点，因为Android的开源特性，我们应该深入到FrameWork层，了解其背后的运行机制以后，碰到的很多问题就迎刃而解了。

本书面向的读者群体是开发经验在1-2年的初中级开发者，采用问答的形式，相信读完此书以后，你会有一定的提升的！

我在学习这些知识的过程中，研究了很多的博客文章，在这里感谢这些喜欢分享的朋友们的帮助，我会把一些参考文章在每一章的最后列出，再次感谢这些前辈和布道者的分享精神！

由于在文章中会涉及到一些代码的列举，如果一些代码与要讨论的问题关系不大，我将会以下面的方式省略，所以你可以把本书中的源码看做是伪代码，如果你想查看实际代码，请按照文件路径自行查找。

frameworks/base/core/java/android/app/ActivityThread.java

```
 public static void main(String[] args) {

        ...

        Looper.prepareMainLooper();

        ActivityThread thread = new ActivityThread();
        thread.attach(false);

        if (sMainThreadHandler == null) {
            sMainThreadHandler = thread.getHandler();
        }

        AsyncTask.init();

        Looper.loop();

        throw new RuntimeException("Main thread loop unexpectedly exited");
    }
}
```

另外，由于Framework中存在很多不常见的类，在文章中我只会简单的提到某个类的作用或者是与其他类的关系，更详细的信息请自行参考源码。

好了，让我们开始这本书的创作吧！
