Context上下文简述

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标志,否则会报错。相当于重新创建了一个新的栈。