进程 process: 程序的 1 个运行实例,
用以 区别 程序 这个静态的概念
线程 thread: 是 cpu 调度的基本单位
1> Android 中 process/thread 概念
应用程序的 主入口 一般都是 main 函数
main 函数的工作:
(1) 初始化
ex: windows 环境下的创建窗口, 向系统申请资源等
(2) 进入死循环
并在 循环中处理各种事件, 直到进程退出
这种模型是 “以事件为 驱动” 的软件系统的必然结果
Android 中
Activity 和 Service 应用程序的 主线程 都是 ActivityThread
同 1 程序包里的 2 个Activity 默认运行于 同一个进程中
Android 提供特殊的方式 让不是同 1 个包里的组件 也可以运行于相同的进程中
优势: 它们可以非常方便地 进行资源共享, 而不用经过 进程间通信
[1] 针对 个别组件
可以在 AndroidMainfest.xml 文件的 4大组件都支持,可以根据需要添加 标签中加入 android:process 属性来表明这一组件想要运行在哪个进程空间
[2] 针对 整个程序包
可以直接在
结论:
<1> 4 大组件 不是 程序(进程)的全部, 而只是它的零件组成<2> 应用程序启动后, 将创建 ActivityThread<3> 同 1 个包中的组件 将运行在 相同的进程空间中<4> 不同包 的组件可以通过 一定方式 运行在同一个 进程空间 中<5> 1 个 Activity 应用启动后 至少会有 3 个线程, 1 个主线程 和 2 个 Binder 线程
2> H/M/R/L 四大金刚
handler 、 MessageQueue、 Runnable、 Looper
① Runnable 和 Message 可以被 压入某个 MessageQueue 中, 形成 1 个集合
值得注意的是: 一般情况某种类型的 MessageQueue 只允许保存相同类型的 Object 实际上 源码中 需要相对 Runnable 进行 相应转换
② Looper 循环的做某事
在图中, 它不断的 从 MessageQueue 中取出 1 个 item,
然后 传给 Handle 处理, 如此循环往复
如果 队列为空, 它会进入休眠
③ Handle 真正的 处理事务 的地方 ( 真大佬 )
它利用自身的 处理机制, 对传入的 各种 Object 进行对应的 处理并 产生最终结果
即: Looper 不断获取 MessageQueue 中的 1 个 Message ,然后由 Handle 来处理
<1> Handle
path: framework/base/core/java/android/os/Handle.java
具体可以 参考 (参见我的知识库—Android 源代码编译) 下载的 源码
public class Handler {/** Set this flag to true to detect anonymous, local or member classes* that extend this Handler class and that are not static. These kind* of classes can potentially create leaks.*/private static final boolean FIND_POTENTIAL_LEAKS = false;private static final String TAG = "Handler";private static Handler MAIN_THREAD_HANDLER = null;final MessageQueue mQueue;final Looper mLooper;final CallBbace mCallback;/*** Callback interface you can use when instantiating a Handler to avoid* having to implement your own subclass of Handler.*/

每个 thread 只对应 1 个 looper
每个 looper 只对应 1 个 messageQueue
每个 messageQueue 中有 N 个 message
每个 message 中对多指定 1 个 Handle 来处理
所以:
thread 和 Handle 是 1对多 关系
Handle 作用:
<1> 处理 message<2> 将某个 messgae 压入 messageQueue
实现 第一个 功能 的相关函数声明如下:
public void dispatchMessage( Message msg ); // 对 Message 进行分发
public void handleMessage( Message msg); //对 Message 处理
注: 如果文章对你有帮助请点赞支持呀//!有问题可联系博主: snowzhang183@126.com
