Android重学之查漏补缺——Context引起的内存泄露

Android中很多资源文件都需要Context来加载。如果这些资源没有被释放,那么Context的引用不为null,造成对应的Activity即使调用了finish()但其占有的内存依然不能被释放。

第一种情况

比如:

Soundmanager.getInstance(this).play(SoundManager.MAIN_BG_SOUND);

这种单例模式的全局的静态方法,就不能用Activity的Context,最好用Application的Context。因为它的生命周期与引用的Activity不相同,无法释放Activity的内存。

第二种情况

比如:

ViewRoot的内部类W,

public class ViewRoot {
	static class W extends IWindow.Stub{
		private final WeakReference mViewRoot;
		public W(ViewRoot viewRoot){
			mViewRoot = new WeakReference(viewRoot);
		}
   	}
}

不要用非静态的内部类,静态的内部类如果需要引用Activity本身,最好用弱引用来实现,这样Activity释放时不会因为被内部类引用而无法释放。

你可能感兴趣的:(查漏补缺,Android,Java,内存泄露,内存,类)