Android Context相关问题

有哪几种Context,它们的关系是什么?

总体而言,一共有三种Context,分别是Activity,Service和Application,所以一个应用程序中的Context数量可以等于activity + service + 1(Application)


Android Context相关问题_第1张图片
Context结构.jpg

总体结构如上图所示,Context的关联类使用了装饰模式,优点有下面几个:

  • 使用者可以更方便的使用Context
  • 如果ContextImpl发生了变化,其装饰类和子类无需做任何修改
  • ContextImpl的实现和其使用者相分离
  • 通过组合的方式扩展了ContextImpl的功能

Dialog的创建必须使用ActivityContext的原因

在添加Dialog时,WindowManager会检查所使用的activity是否有token,这个token只有Activity才拥有,所以要使用Activity Context来初始化Dialog。
另外,系统的Window是不需要token的,可以设置dialog的window type为系统window,即可以使用Application Context来启动了,需要声明权限。

Application Context启动Activity报错的原因

在目标Activity的启动模式为standard模式下,谁启动了这个Activity,那么目标Activity就会运行在启动它的那个Context所在的栈中。但是Application Context并没有任务栈,所以无法正常启动。
可以为目标Activity指定NEW_TASK的flag,为其创建一个新的任务栈。

你可能感兴趣的:(Android Context相关问题)