主要的功能是加载和访问资源(Context通常用来获取APP资源,创建UI,获取系统Service服务,启动Activity,绑定Service,发送广播,获取APP信息等)

如何理解:

  • 我们可以理解为“上下文”:它贯穿整个应用;
  • 也可以理解成“运行环境”:它提供了一个应用运行所需要的信息,资源,系统服务等;
  • 同样可以理解成“场景”:用户操作和系统交互这一过程就是一个场景,比如Activity之间的切换,服务的启动等都少不了Context。

Context实例创建的情况:

  • 创建Application 对象时, 而且整个App共一个Application对象
  • 创建Service对象时
  • 创建Activity对象时

Context相关类的继承关系:

在android中有两种context,一种是 application context,一种是activity context,通常我们在各种类和方法间传递的是activity context。
比如一个activity的onCreate:

protected void onCreate(Bundle state) {
super.onCreate(state); TextView label = new TextView(this); //传递context给view control
label.setText("Leaks are bad"); setContentView(label);
}

把activity context传递给view,意味着view拥有一个指向activity的引用,进而引用activity占有的资源:view hierachy, resource等。 这样如果context发生内存泄露的话,就会泄露很多内存。 这里泄露的意思是gc没有办法回收activity的内存。

Leaking an entire activity是很容易的一件事。

当屏幕旋转的时候,系统会销毁当前的activity,保存状态信息,再创建一个新的。

避免context相关的内存泄露,注意以下几点:

  • 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的
  • 对于生命周期长的对象,可以使用application context
  • 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化

最新文章

  1. Win10桌面预览版14316更新内容大全
  2. java常见的问题
  3. HDU-2222 Keywords Search(AC自动机--模板题)
  4. 学习笔记--函数式线段树(主席树)(动态维护第K极值(树状数组套主席树))
  5. 【leetcode❤python】 257. Binary Tree Paths
  6. delete-node-in-a-bst
  7. Hibernate逍遥游记-第12章 映射值类型集合-004映射Map(<map-key>)
  8. css中将div定位居中
  9. CAD输出的局部平面坐标数据配准转换到WGS84坐标系
  10. Sitecore Digital Marketing System, Part 1: Creating personalized, custom content for site visitors(自定义SiteCore中的 Item的Personalize的Condition) -摘自网络
  11. LNK1123: 转换到 COFF 期间失败: 文件无效或损坏[汇总]
  12. Linux内存点滴:用户进程内存空间
  13. protected 学习
  14. html5的结构
  15. UVA - 1218 Perfect Service (树形DP)
  16. pyspider爬取TripAdvisor
  17. Markdown编辑器editor.md的使用---markdown上传图片
  18. git和github的学习
  19. docker实战练习(一)
  20. Deploy .NET Core with Docker

热门文章

  1. BIO、NIO、AIO系列一:NIO
  2. vue 中view层中方法的使用
  3. HttpServletRequest修改/添加header和cookie参数
  4. Websphere下删除某个文件(ibm-partialapp-delete.props)
  5. ColorSense颜色检测器
  6. awk调用shell
  7. ubuntu-12.04.5-desktop-i386.iso:ubuntu-12.04.5-desktop-i386:安装Oracle11gR2
  8. VC获得本机网络连接状态
  9. What's new in JDK 8
  10. go jwt OAuth2.0