@@ -106,16 +106,16 @@ AMS即ActivityManagerService,AMS是Android中最核心的服务,主要负责
106106
107107+ 参考资料[《AMS在Android起到什么作用? 》](https://zhuanlan.zhihu.com/p/86266649)
108108
109- # ## 第2章 应用进程相关问题
109+ # ### 第2章 应用进程相关问题
110110
111111本章主要讲解应用进程的启动,以及伴随进程启动过程中的一些重要机制的初始化原理,比如binder机制,Application,以及Context等方面的面试问题。
112- # ### 1 Android应用进程是怎么启动的吗?
113- # #### 冷启动与热启动
112+ # #### 1 Android应用进程是怎么启动的吗?
113+ # ##### 冷启动与热启动
114114Activity启动过程中,一般会牵涉到应用启动的流程。应用启动又分为冷启动和热启动。
115115+ 冷启动:点击桌面图标,手机系统不存在该应用进程,这时系统会重新fork一个子进程来加载Application并启动Activity,这个启动方式就是冷启动。
116116+ 热启动:应用的热启动比冷启动简单得多,开销也更低。在热启动中,因为系统里已有该应用的进程,所以系统的所有工作就是将您的 Activity 带到前台。 冷启动是应用完全从0开始启动,涉及到更多的内容,所以就应用冷启动的过程展开讨论。
117117
118- # #### 应用启动流程(冷启动)
118+ # ##### 应用启动流程(冷启动)
119119! [](./imgs/activy_start.jpeg)
120120+ 启动进程
121121 + 点击图标发生在Launcher应用的进程,startActivity ()函数最终是由Instrumentation通过Android的Binder跨进程通信机制 发送消息给 system_server 进程;
@@ -127,14 +127,14 @@ Activity启动过程中,一般会牵涉到应用启动的流程。应用启动
127127 + mStackSupervisor#attachApplicationLocked ()方法中调用 ActivityThread#ApplicationThread#scheduleLaunchActivity ()方法,进而通过主线程Handler消息通知创建 Activity 对象,然后再调用 mInstrumentation#callActivityOnCreate ()执行 Activity#onCreate () 生命周期
128128+ 布局& 绘制 源码流程可以参考Android View 的绘制流程分析及其源码调用追踪
129129
130- # #### 参考资料
130+ # ##### 参考资料
131131 + [《Android应用启动流程分析》](https://zhuanlan.zhihu.com/p/596546019)
132132 + [《Android应用进程的创建 — Activity的启动流程》](https://www.jianshu.com/p/0875116e2e54)
133133
134- # ### 2 应用是怎么启用Binder机制的
134+ # #### 2 应用是怎么启用Binder机制的
135135
136136
137- # ### 3 谈谈对Application的理解
137+ # #### 3 谈谈对Application的理解
138138Application的作用
139139+ 保存应用进程中的全局变量
140140 Application会横跨进程的生命周期,我们可以在Application中维护一些全局变量
@@ -143,7 +143,7 @@ Application的作用
143143+ 提供应用的上下文
144144 Application可以提供一个稳定的context,而且因为Application的生命周期横跨整个应用的生命周期,所以不需要担心Application的context内存泄漏的问题
145145
146- # ### 4 谈谈对Context的理解
146+ # #### 4 谈谈对Context的理解
147147Context的字面含义是上下文环境。应用的上层代码通过Context类提供的接口来操作Android的4大组件和资源。在Android的应用程序中,Context无处不在,很多接口都要求用Context对象作为参数。
148148! [](./imgs/context.jpeg)
149149
@@ -163,86 +163,86 @@ Activity、Service和Application这三种类型的Context都是可以通用的
163163 返回当前的Activity实例,如果是UI控件需要使用Activity作为Context对象,但是默认的Toast实际上使用ApplicationContext也可以。
164164 + getApplication()和getApplicationContext ()
165165 它们得到的是同一个对象。getApplication()只能在Activity和Service中得到。在BroadcastReciver必须使用getApplicationContext ()。
166- # #### 参考资料
166+ # ##### 参考资料
167167+ [《如何理解Context? 》](https://zhuanlan.zhihu.com/p/27163977)
168168
169- # ## 第3章 Activity组件相关问题
169+ # ### 第3章 Activity组件相关问题
170170
171171这一章主要讲解Activity相关的机制,包括Activity的启动流程,显示原理等相关面试问题,通过本章的学习,我们不但能熟悉它,更能深入了解它。
172- # ### 1 说说Activity的启动流程
173- # ### 2 说说Activity的显示原理
174- # ### 3 应用的UI线程是怎么启动的
172+ # #### 1 说说Activity的启动流程
173+ # #### 2 说说Activity的显示原理
174+ # #### 3 应用的UI线程是怎么启动的
175175
176- # ## 第4章 其它应用组件相关面试问题
176+ # ### 第4章 其它应用组件相关面试问题
177177
178178本章主要讲除了Activity之外的应用组件相关面试问题,包括service的启动和绑定原理,静态广播和动态广播的注册和收发原理,provider的启动和数据传输原理等等。
179- # ### 1 说说service的启动原理
179+ # #### 1 说说service的启动原理
180180
181- # ### 2 说说service的绑定原理-1
181+ # #### 2 说说service的绑定原理-1
182182
183- # ### 3 说说service的绑定原理-2
183+ # #### 3 说说service的绑定原理-2
184184
185- # ### 4 说说动态广播的注册和收发原理
185+ # #### 4 说说动态广播的注册和收发原理
186186
187- # ### 5 说说静态广播的注册和收发原理
187+ # #### 5 说说静态广播的注册和收发原理
188188
189- # ### 6 说说Provider的启动原理
189+ # #### 6 说说Provider的启动原理
190190
191- # ## 第5章 UI体系相关问题
191+ # ### 第5章 UI体系相关问题
192192
193193本章主要讲UI体系相关面试问题,包括UI刷新机制,涉及到vsync和choreographer原理。另外还会讲到surface的相关原理,涉及到应用和WMS、surfaceFlinger通信。
194- # ### 1 说说屏幕刷新的机制-1
194+ # #### 1 说说屏幕刷新的机制-1
195195
196- # ### 2 说说屏幕刷新的机制-2
196+ # #### 2 说说屏幕刷新的机制-2
197197
198- # ### 3 surface跨进程传递原理
198+ # #### 3 surface跨进程传递原理
199199
200- # ### 4 surface的绘制原理
200+ # #### 4 surface的绘制原理
201201
202- # ### 5 你对vsync机制有了解吗?
202+ # #### 5 你对vsync机制有了解吗?
203203
204- # ### 6 SurfaceView & View的区别,底层原理有何不同
204+ # #### 6 SurfaceView & View的区别,底层原理有何不同
205205
206- # ## 第6章 进程通信相关面试问题
206+ # ### 第6章 进程通信相关面试问题
207207
208208本章主要讲进程通信相关面试问题,包括binder的整体架构和通信原理,oneway机制,binder对象的传递等等。
209- # ### 1 Android Framework用到了哪些跨进程通信方式
209+ # #### 1 Android Framework用到了哪些跨进程通信方式
210210
211- # ### 2 谈谈你对Binder的理解
211+ # #### 2 谈谈你对Binder的理解
212212
213213# ### 3 一次完整的ipc通信流程是怎样的
214214
215- # ### 4 binder对象跨进程传递原理是怎么样的
215+ # #### 4 binder对象跨进程传递原理是怎么样的
216216
217- # ### 5 说一说binder的oneway机制
217+ # #### 5 说一说binder的oneway机制
218218
219- # ## 第7章 线程通信相关面试问题
219+ # ### 第7章 线程通信相关面试问题
220220
221221本章主要讲线程通信原理相关面试问题,包括消息队列的创建,消息循环机制,消息延时,同步和异步消息,消息屏障等等内容。
222- # ### 1 线程的消息队列是怎么创建的?
222+ # #### 1 线程的消息队列是怎么创建的?
223223
224- # ### 2 说说android线程间消息传递机制
224+ # #### 2 说说android线程间消息传递机制
225225
226- # ### 3 handler的消息延时是怎么实现的?
226+ # #### 3 handler的消息延时是怎么实现的?
227227
228- # ### 4 说说idleHandler的原理
228+ # #### 4 说说idleHandler的原理
229229
230- # ### 5 主线程进入loop循环了为什么没有ANR?
230+ # #### 5 主线程进入loop循环了为什么没有ANR?
231231
232- # ### 6 听说过消息屏障么?
232+ # #### 6 听说过消息屏障么?
233233
234- # ### 7 多线程间通信和多进程之间通信有什么不同,分别怎么实现?
234+ # #### 7 多线程间通信和多进程之间通信有什么不同,分别怎么实现?
235235
236- # ## 第8章 技巧,心得相关
236+ # ### 第8章 技巧,心得相关
237237
238238除了上面章节之外的所有问题,都会放在本章讲到,除了原理之外,还会分享一些代码技巧。
239- # ### 1 怎么跨进程传递大图片
239+ # #### 1 怎么跨进程传递大图片
240240
241- # ### 2 说说threadLocal的原理
241+ # #### 2 说说threadLocal的原理
242242
243- # ### 3 来说说looper的副业
243+ # #### 3 来说说looper的副业
244244
245- # ### 4 怎么检查线程有耗时任务
245+ # #### 4 怎么检查线程有耗时任务
246246
247- # ### 5 怎么同步处理消息
248- # ### 6 主线程&ApplicationThread
247+ # #### 5 怎么同步处理消息
248+ # #### 6 主线程&ApplicationThread
0 commit comments