Activity context 和 Application context 区别与联系
来源:互联网 发布:tensorflow finetune 编辑:程序博客网 时间:2024/06/05 04:23
声明:转载自:http://blog.csdn.net/qq_27258799
context大家应该都不陌生,每个Activity的标配,用来加载资源什么的。但是context有两种:Activity context 和 Application context 。一直以来对这两个context都理解不清,这次专门记录下。
Activity context 和 Application context 的区别在于生命周期。
Application context是个好汉(全局变量),与你的程序同生共死。而Activity context 则是个随处可见的墙头草,你的Activity不在了,它就不在了。
值得注意的是Activity context使用不当是会造成内存泄漏的,这里用网友的一段代码解释。比如,当我们旋转屏幕的时候,Activity是会被销毁重建只保存状态信息,里面的资源也会重新抓取。为了不想重新加载图片资源,我选择一个静态变量保存,简直机智!
public class myactivity extends Activity { private static Drawable sBackground; protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad"); if (sBackground == null) { sBackground = getDrawable(R.drawable.large_bitmap); } label.setBackgroundDrawable(sBackground);//drawable attached to a view setContentView(label); }}
但是看似OK的代码其实问题很大。由于sBackground是静态的,因此sBackground不会被销毁。而sBackground保存了label的引用,label保存了myactivity 的引用,这一连串联系决定,myactivity 也不能被销魂,这样就引起了内存泄漏。
2016年3月10日补充:
后来在另一家博客上看到“谦虚的天下”讲到,上面这种bug已经在Android3.0以后被官方搞定了,也就是说我们现在在这样使用,也是OK的,原因请看:
http://blog.csdn.net/qq_27258799/article/details/50843554
总之内存泄漏经常很难让用户察觉到,但可怕的是内存泄漏的堆积,久而久之就会出现大名鼎鼎的OOM(Out Of Memory),所以我们要尽量在每个地方避免内存泄漏问题。
谨记三点:
不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的。
对于生命周期长的对象,可以使用application context 。
避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化。
- Activity context 和 Application context 区别与联系
- Activity context 和 Application context 区别与联系
- Application context和Activity context的区别
- Application context和Activity context的区别
- Application context和Activity context的区别
- Application context和Activity context的区别
- Application context和Activity context的区别
- Application context和Activity context的区别
- Application context和Activity context的区别
- Android下Context、Application、Activity之间的联系和区别
- Application Context 和 Activity Context
- Application中的Context和Activity中的Context区别
- Activity的context和Application的context的区别
- application的context和activity的context区别
- Application context和Activity context的区别及应用
- application context/activity context与内存泄露
- Application中的Context和Activity中的Context
- Context与Activity/Service/Application
- android 开发中的一些警告处理
- JSON——入门语法、对象、数组
- ubuntu14.04设置静态ip
- android 7.0 + 相机拍照 FileUriExposedException
- java折点计数
- Activity context 和 Application context 区别与联系
- GDB调试
- 观察者模式
- Tornado自定义分布式session框架
- compareTo方法和compare方法
- 认识Xcode的调试器:LLDB调试技术
- uva129||hdu 1627 Krypton Factor 回溯法
- Linux_Service—NFS
- random.nextInt()与Math.random()基础用法