在Android开发中,我们经常会用到Context,那么Context到底是什么呢?理解Context是什么?怎么用?会让我们在开发中避免一些问题。
首先Context是Android SDK中定义的一个抽象类,通过Context我们可以获取应用内的资源,比如res/aseets,通过Context我们可以启动Activity、Service和发送广播等等。
Context是个抽象类,它有两个重要直接子类,一个是ContextImpl
,它实现了Context中的绝大部分功能,另外一个是ContextWrapper
,它内部持有另外一个Context实例,通过代理的方式实现了Context。
从上面可以看出,Application和Service直接继承了ContextWrapper,而Activity是继承了ContextWrapper的一个子类ContextThemeWrapper,它在父类的基础上扩展了定义主题等方法,因为Activity作为主要的UI组件,它是可以定义主题的。在Android项目中,我们可以通过Activity、Service和Application等组件来拿到Context实例。
上面提到了Context可以获取资源、启动Activity、Service等等,那不同的Context是否都一样呢?下面看看上面的几种Context的不同之处。
从上面可以看出,Application和Service作为Context使用时,有一些限制
FLAG_ACTIVITY_NEW_TASK
,创建一个新的任务栈来启动。