一、继承关系:
Activity -> ContextThemeWrapper -> ContextWrapper -> Context
下面我根据 Android 源代码,抽出了 Activity 所继承的类和实现的接口,并简单的分析了以下:
Context 抽象类
首先发现里面有很多常量,这些常量有些是采用16进制形式。
这位仁兄写得很详细。
public static final int MODE_PRIVATE = 0x0000;
public static final int MODE_APPEND = 0x8000;
public static final int MODE_MULTI_PROCESS = 0x0004;
public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
public static final int BIND_AUTO_CREATE = 0x0001;
public static final int BIND_DEBUG_UNBIND = 0x0002;
public static final int BIND_NOT_FOREGROUND = 0x0004;
public static final int BIND_ABOVE_CLIENT = 0x0008;
public static final int BIND_ALLOW_OOM_MANAGEMENT = 0x0010;
public static final int BIND_WAIVE_PRIORITY = 0x0020;
public static final int BIND_IMPORTANT = 0x0040;
public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
public static final int BIND_VISIBLE = 0x10000000;
public static final int BIND_SHOWING_UI = 0x20000000;
public static final int BIND_NOT_VISIBLE = 0x40000000;
有四种类型:
1、绑定服务的标识;(以 BIND 开头的)
2、选项存储的标识;(以 MODE 开头的)
3、系统服务的常量;(字符串形式)
4、Context 标识;
定义了抽象方法:
1、获取资源、全局信息的方法;
2、定义出启动活动、服务、发广播、注册广播、注销广播等抽象方法;
3、定义了跟权限相关的抽象方法
ContextWrapper
它属于中间类,里面的方法都是实现父类的方法,并使用了回调的形式。使整个类显得简单明了。
具体大家可以看下源码,下面就丢几句给个样式参考:
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
@Override
public Resources getResources()
{
return mBase.getResources();
}
ContextThemeWrapper
顾名思义,它实现了父类关于主题的方法、对 getResources、getSystemService 方法实现了逻辑判断
Activity
作为一个构造界面、处理交互事件的主体。
二、Activity接口实现
1、LayoutInflater
layout加载器
2、Window.Callback
手势、菜单交互事件以及与窗体相关的事件
3、KeyEvent.Callback
按键交互事件
4、OnCreateContextMenuLinstener
ContextMenu 创建监听器
5、ComponentCallbacks2
组件回调的一个接口(具体还不了解)
由此可明白 Activity 主要实现的就是界面、交互,这两个功能。
跟这两个功能相关的事情,都由 Activity 来做。