原文:http://android-developers.blogspot.jp/2009/01/avoiding-memory-leaks.html
Andriod应用的堆栈大小在T-Mobile G1上被限制在16MB,对于一个手机这已经是很大的内存了,但对一些开发者来说还是不够。即使你不需要使用这么多的内存空间,你也应该尽可能地节省使用,这样就不至于在其他应用运行的时候将你的杀掉。Android可以在内存中缓存的应用越多,应用间的切换也就越流畅。作为我的一部分工作,我深入了解了Android应用内存泄漏问题,发现大多数都是同一类情况——长时间保持对一个Context的引用(keep a long_lived reference to a Context)。
在Android里,许多操作都需要使用Context,但绝大部分情况是获取、加载资源,这也是所有的控件需要在构造函数里接收一个Context参数的原因。一般情况下,我们可以获取两种Context,Activity和Application,开发者通常会将第一个也就是Activity作为参数进行传递。
@Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad"); setContentView(label); }
当屏幕方向改变时系统会默认destroy当前的activity,保存当前状态并创建一个新的activity,也就是Android会重新从资源文件中加载应用的视图。想象一下你的应用里有一幅大图,但并不像每次旋转屏幕都重新去加载,将它缓存在内存里最简单的办法是将它声明为static类型:
private static Drawable sBackground; @Override 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); setContentView(label); }
原文地址:http://blog.csdn.net/xu_fu/article/details/39344695