欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Context相关内容学习

程序员文章站 2022-05-02 19:27:45
...

概述

Android程序和Java程序一个不同的地方在于Android程序不能仅仅通过一个main方法就启动起来,他还需要特定的环境,就是Context,称之为上下文环境,在这个环境下,有Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的Context。Context是维持Android程序中各组件能够正常工作的一个核心功能类。

Android Context相关内容学习

Context的继承结构还是稍微有点复杂的,直系子类有两个,一个是ContextWrapper,一个是ContextImpl。ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能的实现类。ContextWrapper有三个直接的子类ContextThemeWrapper、Service和Application。其中,ContextThemeWrapper是一个带主题的封装类,而它有一个直接子类就是Activity。由此,其实得出结论,Context一共有三种类型,分别是Application、Activity和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。

Context数量 = Activity数量 + Service数量 + 1。上面的1代表着Application的数量,因为一个应用程序中可以有多个Activity和多个Service,但是只能有一个Application。

Application Context

很多的Application都是被当作通用工具类来使用的,只需要调用getApplication()方法就能拿到我们自定义的Application的实例。除了getApplication()方法,其实还有一个getApplicationContext()方法。

MyApplication myApp = (MyApplication) getApplication();
Context appContext = getApplicationContext();

getApplication()方法的语义性非常强,一看就知道是用来获取Application实例的,但是这个方法只有在Activity和Service中才能调用的到。也许在绝大多数情况下我们都是在Activity或者Service中使用Application的,但是如果在一些其它的场景,比如BroadcastReceiver中也想获得Application的实例,这时就可以借助getApplicationContext()方法了,

MyApplication myApp = (MyApplication) context.getApplicationContext();

 

 

相关标签: Android android