Context是一个抽象类,activity,service,application都是其子类,因此一个应用程序中 Context 的数量等于 Activity 和 Service 的数量加1。
Context的主要功能为:
1)启动Activity
2)启动和停止Service
3)发送广播消息(Intent)
4)注册广播消息(Intent)接收者
5)可以访问APK中各种资源(如Resources和AssetManager等)
6)可以访问Package的相关信息
7)APK的各种权限管理
返回当前进程的单实例全局Application对象的Context,指向的是Context
public abstract Context getApplicationContext();
返回由构造函数指定或setBaseContext()设置的上下文。
1
2
3
4
5
6
7
/**
* @return the base context as set by the constructor or setBaseContext
*/
public Context getBaseContext() {
return mBase;
}getApplication()只能在Activity和Service里使用,指向的是Application对象
1
2
3
4
5
/** Return the application that owns this activity. */
public final Application getApplication() {
return mApplication;
}很重要的一点,activity的context对象在activity销毁的时候,context也会跟着销毁,所以持有activity对象没有及时销毁可能造成内存泄漏。
解决方案就是使用applicationContext代替activity的context
Intent也要求指出上下文,如果是activity的上下文就会把启动的activity关联当前的activity,如果是application的context,那么启动就需要添加Intent.FLAG_ACTIVITY_NEW_TASK标志,否则会报错。相当于重新创建了一个新的栈。