本文来分析 SystemUI 的 VolumeUI 模块,这个模块比较简单,它使用MVP架构完成设计的,如下图
本文首先会讲解这个架构如何形成的,然后会分析按下 Power 键后处理流程。
MVP的创建
通过 SystemUI之StatusBar创建 可知,VolumeUI 的入口为 VolumeUI#start()
// frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeUI.java
public void start() {
// ...
// 创建 VolumeDialogComponent 对象
mVolumeComponent = SystemUIFactory.getInstance()
.createVolumeDialogComponent(this, mContext);
mVolumeComponent.setEnableDialogs(enableVolumeUi, enableSafetyWarning);
// ...
// 启动VolumeUI的功能
mVolumeComponent.register();
}
复制代码
VolumeUI 启动的时候会创建一个 VolumeDialogComponent 对象,从名字可以看出,它代表 VolumeUI 组件,通过它可以创建整个MVP。
VolumeDialogComponent 对象创建完成后,就会调用它的register()方法启动 VolumeUI 功能。它其实就是关联 Presenter 层和 Model 层。
首先来看看 VolumeDialogComponent 的构造函数
// frameworks/base/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java
public VolumeDialogComponent(SystemUI sysui, Context context) {
// ...
// build()之后,会调用createDefault(),然后调用Callback
Dependency.