《Android开发艺术探索》第9章-四大组件的工作过程读书笔记

由于 Android 的内部实现多数都比较复杂,在研究内部实现上应该更加侧重于对整体流程的把握,而不能深入代码细节不能自拔,太深入代码细节往往会导致“只见树木不见森林”的状态。处于这种状态下,无法对整体流程建立足够的认识,取而代之的是烦琐的代码细节,但是代码细节本身并不具有太多的指导意义,因此这种学习状态是要极力避免的。但凡事不是绝对的,如果开发者从事的工作是 Android Rom 开发,那底层代码细节还是要有所涉猎的。

1 四大组件的运行状态

对比项 Activity Service BroadcastReceiver ContentProvider
注册方式 必须在 AndroidManifest中注册 必须在 AndroidManifest中注册 可以在 AndroidManifest中注册,也可以在代码中注册 必须在 AndroidManifest中注册
调用方式 需要借助 Intent(显式 Intent 和隐式 Intent) 需要借助 Intent 需要借助 Intent 不需要借助 Intent
组件定位 展示型组件 计算型组件 消息型组件 数据共享型组件
停止方式 调用 Activity 的 finish 方法来结束一个 Activity 组件的运行 需要采用 stopService 和 unBindService 停止一个 Service 组件 没有停止的概念 不需要手动停止
启动 Api startActivity startService,bindService 动态注册:registerReceiver,发送广播:Context 的 send 方法
注意的点 没有 Activity 来处理某个隐式 Intent 时,要处理 ActivityNotFoundException Service 本身时运行在主线程中的,所以耗时的后台计算仍然需要在单独的线程中去做。不要把 Service 和 Thread 混同了。 动态注册广播和解除注册广播要成对出现,BroadcastReceiver 不适合用来执行耗时操作 ContentProvider 的 onCreate 方法运行在主线程里,所以不能在 onCreate 方法里做耗时操作;ContentProvider 的 insert,delete,update 和 query 方法在 Binder 线程池中被调用,因此需要处理好线程同步

2 Activity 的工作过程

2.1 Activity 的启动过程

查看笔者的文章: Android筑基——Activity的启动过程之在一个Activity中启动另一个Activity(基于api21)

3 Service 的工作过程

3.1 Service 有哪两种工作状态?这两种状态可以共存吗?

一种是启动状态,主要用于执行后台计算;一种是绑定状态,主要用于其他组件和 Service 的交互。

Service 的这两种工作状态是可以共存的,即 Service 既可以处于启动状态也可以同时处于绑定状态。

3.2 Service 的启动过程

查看笔者的文章:Android筑基——Service的启动过程之同进程启动(基于api21)

3.3 Service 的绑定过程

查看笔者的文章:Android筑基——Service的绑定过程之跨进程绑定(基于api21)

3.4 Service 和 Thread 的关系是什么?

ServiceThread 之间没有任何关系。

Thread 用于开启一个子线程,在里面执行一些耗时操作,这样就不会阻塞主线程的运行了;Service 主要用来处理后台任务,但是 Service 是运行在主线程的。需要说明的是,Service 处理后台任务里的"后台",是指 Android 的后台,即不依赖于 UI 的。

4 BroadcastReceiver 的工作过程

4.1 BroadcastReceiver的动态注册,发送和接收过程

查看笔者的文章:Android筑基——BroadcastReceiver 的动态注册、发送和接收过程(基于api21)

4.2 静态注册的广播接收者和动态注册的广播接收者在接收广播时,实例会不会重新创建?

静态注册的广播接收者每次接收广播,实例都会重新创建;
动态注册的广播接收者每次接收广播,实例都不会重新创建。

5 ContentProvider 的工作过程

5.1 ContentProvider的启动过程和数据操作方法调用过程

查看笔者的文章:Android筑基——ContentProvider 的跨进程启动过程和数据操作方法调用过程(基于api21)

参考

  1. ActivityManagerService数据结构Activity栈管理(二)
  2. android Activity启动过程(二)从ActivityManagerService的startActivity到栈顶Activity的onPause过程
  3. android Activity启动过程(三)从栈顶Activity的onPause到启动activityon的Resume过程
  4. Android Service完全解析,关于服务你所需知道的一切(上)-郭霖

猜你喜欢

转载自blog.csdn.net/willway_wang/article/details/121549720