广播机制

Android系统中的广播(Broadcast)机制简要介绍和学习计划
广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。

这个所谓的广播其实实质上还是以Binder为基础的,这里可以明白一个道理,就是andorid系统核心的进程通信中,Binder的地位之重要。

第一步通过广播类型,接收器注册广播接收类型。
第二部广播播放器,通过广播播放类型找到需要接受的广播接收器发送数据。

注册实质

我们将一个filter类型为BROADCAST_COUNTER_ACTION类型的BroadcastFilter实例保存在ActivityManagerService的成员变量mReceiverResolver中,这个BroadcastFilter实例包含了我们所注册的广播接收器,

广播实质

通过mReceiverResolver.queryIntent函数将这个BroadcastFilter实例取回来。由于注册一个广播类型的接收器可能有多个,所以这里把所有符合条件的的BroadcastFilter实例放在一个List中,然后返回来。

为了实现后来注册的接收器也同样能接受数据这里还定义了一个叫做Sticky Intent,用来保存对应广播类型的intent。
Android应用程序发送广播(sendBroadcast)的过程分析

ActivityManagerService实现了广播机制的管理。个人感觉这里广播可以是一个单纯的进程服务。这样其实会很灵活。

Zygot

系统中的两个重要服务PackageManagerService和ActivityManagerService,都是由SystemServer进程来负责启动的,而SystemServer进程本身是Zygote进程在启动的过程中fork出来的。

    1. 系统启动时init进程会创建Zygote进程,Zygote进程负责后续Android应用程序框架层的其它进程的创建和启动工作。

    2. Zygote进程会首先创建一个SystemServer进程,SystemServer进程负责启动系统的关键服务,如包管理服务PackageManagerService和应用程序组件管理服务ActivityManagerService。

    3. 当我们需要启动一个Android应用程序时,ActivityManagerService会通过Socket进程间通信机制,通知Zygote进程为这个应用程序创建一个新的进程。

猜你喜欢

转载自blog.csdn.net/bme314/article/details/79608713