1 前言
如图所示,ConfigurationContainer 是 AMS 家族的重要基类;WindowContainer 继承自 ConfigurationContainer,是 WMS 家族的重要基类。
本文主要介绍 ConfigurationContainer、Configuration、WindowConfiguration、ConfigurationContainerListener。
2 源码
2.1 WindowConfiguration、Configuration、ConfigurationContainerListener
(1)WindowConfiguration
private Rect mAppBounds
private int mWindowingMode
private int mActivityType
(2)Configuration
public final WindowConfiguration windowConfiguration = new WindowConfiguration()
public float fontScale;
//Mobile Country Code
public int mcc
//Mobile Network Code
public int mcc
public Locale locale
public boolean userSetLocale
public int screenWidthDp
public int screenHeightDp
public int densityDpi
(3)ConfigurationContainerListener
void onOverrideConfigurationChanged(Configuration overrideConfiguration)
2.2 ConfigurationContainer
源码地址→/frameworks/base/services/core/java/com/android/server/wm/ConfigurationContainer.java
(1)类定义
//E为当前节点的子节点类型
public abstract class ConfigurationContainer<E extends ConfigurationContainer>
(2)主要属性
//容器配置
private Configuration mFullConfiguration = new Configuration()
//被覆盖的容器配置
private Configuration mOverrideConfiguration = new Configuration()
//被合并的容器配置
private Configuration mMergedOverrideConfiguration = new Configuration()
//监听被覆盖的容器配置是否发生变化
private ArrayList<ConfigurationContainerListener> mChangeListeners = new ArrayList<>()
(3)获取成员变量
//获取 mFullConfiguration
public Configuration getConfiguration()
//获取 mOverrideConfiguration
public Configuration getOverrideConfiguration()
//获取 mMergedOverrideConfiguration
public Configuration getMergedOverrideConfiguration()
(4)更新配置
//更新 mFullConfiguration
public void onConfigurationChanged(Configuration newParentConfig)
//更新 mOverrideConfiguration
public void onOverrideConfigurationChanged(Configuration overrideConfiguration)
(5)获取边框
//获取边框,取值:mFullConfiguration.windowConfiguration.getBounds()
public Rect getBounds()
//获取边框,取值:mOverrideConfiguration.windowConfiguration.getBounds()
public Rect getOverrideBounds()
(6)窗口模式
//获取窗口配置,取值:mFullConfiguration.windowConfiguration
public WindowConfiguration getWindowConfiguration()
//获取窗口模式,取值:mFullConfiguration.windowConfiguration.getWindowingMode()
public int getWindowingMode()
//是否处于多窗口模式
public boolean inMultiWindowMode()
//是否处于分屏模式
public boolean inSplitScreenWindowingMode()
//是否处于Pip模式
public boolean inPinnedWindowingMode()
//是否处于 FreeformW 模式(窗口可以移动)
public boolean inFreeformWindowingMode()
(7)ActivityType
//取值:mFullConfiguration.windowConfiguration.getActivityType()
public int getActivityType()
//取值:mFullConfiguration.windowConfiguration.getActivityType()
public int getActivityType()
public boolean isActivityTypeHome()
public boolean isActivityTypeRecents()
public boolean isActivityTypeAssistant()
public boolean isActivityTypeStandard()
(8)注册/注销监听器
//mChangeListeners.add(listener)
public void registerConfigurationChangeListener(ConfigurationContainerListener listener)
//mChangeListeners.remove(listener)
public void unregisterConfigurationChangeListener(ConfigurationContainerListener listener)
(9)抽象方法
//获取子节点个数
abstract protected int getChildCount()
//获取子节点
abstract protected E getChildAt(int index)
//获取父节点
abstract protected ConfigurationContainer getParent()