“上下文是什么”这个问题是Android世界中最难的问题之一 .
Context定义了访问系统资源,检索应用程序的静态资产,检查权限,执行UI操作等的方法 . 从本质上讲, Context 是 生产环境 中神对象反模式的一个例子 .
当我们应该使用哪种 Context 时,它变得非常复杂,因为除了作为God Object之外, Context 子类的层次结构树残忍地违反了Liskov Substitution Principle .
This blog post试图在不同情况下总结 Context 类的适用性 .
让我从该帖子中复制主表以确保完整性:
| |应用|活动|服务| ContentProvider | BroadcastReceiver |
|显示对话框|没有|是的|没有|没有|没有|
|开始活动| NO¹|是的| NO¹| NO¹| NO¹|
|布局通胀| NO²|是的| NO²| NO²| NO²|
|启动服务|是的|是的|是的|是的|是的|
|绑定到服务|是的|是的|是的|是的|没有|
|发送广播|是的|是的|是的|是的|是的|
|注册BroadcastReceiver |是的|是的|是的|是的| NO³|
|加载资源值|是的|是的|是的|是的|是的|
应用程序可以从此处启动活动,但它需要创建新任务 . 这可能适合特定的用例,但可以在您的应用程序中创建非标准的后台堆栈行为不推荐或认为是良好做法 . 这是合法的,但通货膨胀将使用您运行的系统的默认主题完成,而不是您的应用程序中定义的内容 . 如果接收方为空,则允许在Android 4.2及更高版本上用于获取粘性广播的当前值 . - 截图