Android Context

来源:互联网 发布:sql between 边界 编辑:程序博客网 时间:2024/06/06 02:34

一、什么是Context

Context可以理解为上下文环境,大概就是里面存储一堆全局变量,这些变量在调用系统 API时需要用到。

Context持有程序的状态、入口、权限、文件系统、等信息,并且是ActivityServiceApplication等组件的父类。通过这些属性,可以获得各种系统的资源。


ActivityServiceApplication并没有直接继承Context,而是继承自ContextWrapperContextWrapperContext的包装类,内部包含一个Context的引用,指向Context的具体实现类ContextImplContextWrapper内部的所有方法直接调用ContextImpl对应的方法。

Context 真正实现都是 ContextImpl


二、context获取方法

mContext = getApplicationContext();

这种方式获得的context是全局context,整个项目的生命中期中是唯一的且一直存在的。


mContext = getContext();

这种方式获得的contextactivity销毁时,context也会跟着销毁了。


mContext = getBaseContext();

还没用到


三、context导致的内存泄漏

ActivtyService Context都是每次创建的,而不是全局唯一,所以不要将 ActivityService当做全局 Context引用,这样会导致 Activity无法销毁,一直被引用者。意思就是不要被单例引用。


先了解原理和使用,源码稍后分析.....