第1章 了解并发 1
1.1 并发很难 1
1.1.1 软件中的并发 1
1.1.2 硬件中的并发 3
1.2 并发很简单 4
1.2.1 线程 4
1.2.2 原子执行 5
1.2.3 可视化 6
1.3 小结 7
第2章 Java并发 8
2.1 Java线程 8
2.1.1 Thread类 9
2.1.2 Runnable 10
2.2 同步 11
2.2.1 互斥 11
2.2.2 常见的同步错误 15
2.3 volatile 17
2.4 wait和notify 21
2.4.1 wait 21
2.4.2 notify 22
2.5 并发包 23
2.5.1 安全发布 24
2.5.2 executor 26
2.5.3 future 27
2.6 小结 28
第3章 Android应用程序模型 29
3.1 生命周期和组件 29
3.1.1 进程优先级 31
3.1.2 组件生命周期 33
3.2 Android应用程序作为Web应用程序 34
3.3 Android进程 35
3.3.1 应用程序启动 35
3.3.2 Android主线程 38
3.4 小结 39
第4章 AsyrncTask和Loader 40
4.1 AsyncTask体系 40
4.1.1 AsyncTask基础 44
4.1.2 AsyncTask的执行 47
4.1.3 AsyncTask的完成 49
4.2 使用AsyncTask 52
4.2.1 AsyncTask:被认为是危险的 52
4.2.2 使之正确 59
4.3 Loader和CursorLoader 60
4.4 AsyncTask:哪里出错了? 68
4.5 小结 69
第5章 Looper/Handler 71
5.1 Looper/Handler简介 71
5.1.1 Looper/Handler的基础 73
5.1.2 委托执行 74
5.2 一些细节 83
5.2.1 Handler和消息 83
5.2.2 启动Looper 86
5.2.3 Native Looper 88
5.2.4 调度和同步屏障 89
5.3 小结 91
第6章 Service、进程和Binder IPC 93
6.1 Service的基础知识 93
6.1.1 启动型Service的要点 95
6.1.2 绑定型Service的要点 97
6.2 Intent 98
6.3 IntentService 101
6.4 绑定型Service 105
6.4.1 一个简单的绑定型Service 106
6.4.2 绑定一个Service 107
6.4.3 解除对Service的绑定 109
6.4.4 绑定多个Service 110
6.4.5 Service的生命周期 112
6.4.6 优先级和标志 114
6.4.7 本地绑定型Service 115
6.5 进程间通信 118
6.5.1 Parcelable 119
6.5.2 Messenger 120
6.5.3 使用AIDL 123
6.5.4 创建进程 128
6.6 浅谈Binder 130
6.6.1 Binder线程 130
6.6.2 Binder数据传输限制 130
6.6.3 绑定到死 131
6.7 小结 131
第7章 定时任务 132
7.1 任务特性 132
7.1.1 线程安全 133
7.1.2 生命周期感知 133
7.1.3 巧妙使用进程优先级 133
7.1.4 电量节约 134
7.1.5 记分卡 135
7.2 Timer和TimerTask 135
7.3 Looper/Handler 135
7.4 基于自定义服务的调度程序 138
7.5 AlarmManager和Intent Service 139
7.5.1 AlarmManagerService 141
7.5.2 可调度的任务 145
7.6 同步适配器 148
7.6.1 定义同步适配器 149
7.6.2 同步适配器的工作原理 152
7.6.3 实现同步适配器 154
7.6.4 对同步适配器评分 159
7.7 JobScheduler 162
7.7.1 调度任务 163
7.7.2 运行任务 166
7.7.3 任务执行 168
7.7.4 对JobScheduler评分 172
7.8 小结 173
第8章 并发工具 174
8.1 静态分析 174
8.1.1 Android Studio 175
8.1.2 Findbugs 176
8.2 注解 183
8.2.1 JCIR注解 184
8.2.2 支持库注解 184
8.3 断言 185
8.4 结束语和最佳做法 186
参考文献 188