原链接如下:http://www.jianshu.com/p/130d3b22a386?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
下面我们再举一个非常常见的例子,Android开发者很喜欢用单例模式,但有些开发者不注意就可能导致内存泄漏,如下:
private static DaVinci sDaVinci = null;
public static DaVinci with(Context context) {
if ( sDaVinci == null ) {
sDaVinci = new DaVinci(context);
}
return sDaVinci;
}
大家可能一时觉得这没啥问题啊,但这并不是一个好的写法,因为这可能让用户在使用时把一个Activity的Context传入,导致让一个单例持有了这个Activity的Context引用,造成内存泄漏。一个比较好的写法是使用
sDaVinci = new DaVinci(context.getApplicationContext());
。因为Application的生命周期本来就是贯穿整个应用的,所以即使被持有也没关系。
几点建议
1,尽量不要用一个生命周期长于Activity的对象来持有Activity的引用。
2,在需要传入Context的时候尽量考虑使用Application的Context,而不是Activity的。
3,在Activity中尽量避免使用生命周期不受控制的非静态类型的内部类,可以使用静态类型的内部类加上弱引用的方式实现。
文/CPPAlien(简书作者)
原文链接:http://www.jianshu.com/p/130d3b22a386
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/130d3b22a386
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。