Activity,Service,Application都继承Context
Context可以实现哪些功能?弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等等等都需要用到Context。
由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。
不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。
Context数量
Context一共有Application、Activity和Service三种类型,因此一个应用程序中Context数量的计算公式 = Application的数量(1)+Activity数量 + Service数量
一个应用程序中可以有多个Activity和多个Service,但是只能有一个Application。则:
Context数量 = Activity数量 + Service数量 + 1