一、有关内存泄漏
首先什么是内存泄漏呢?所有的对象在内存中都应该善始善终,在不需要使用的时候被回收掉,但是当回收的时候有一个正在使用的对象持有了它的引用,使得该对象留在堆内存中从而引起了内存泄漏。
二、单例模式
单例模式是在实际开发中非常常用的一个设计模式,使用单例模式可以保证在开发过程中一个类只拥有一个实例。
三、具体分析
首先来看一段代码
public class SMSVerifyManager {
private static final String TAG = "SMSVerifyManager";
private Context context;
private static SMSVerifyManager instance;
private SMSVerifyManager(Context context) {
this.context = context;
}
public static SMSVerifyManager getInstance(Context context) {
if (instance == null) {
instance = new SMSVerifyManager(context);
}
return instance;
}
}
这是一种很常见的写法,在构造方法里传入context,但是这个context的来源如果不加注意,很容易因为生命周期的长短而引起内存泄漏。请在这里传入Application的context而不是Activity的context,因为如果传入的是Activity的context,当Activity退出时,此context并不会被回收,因为单例对象持有该context的引用,从而引起内存泄漏。如果传入的是Application的context,便不会引发内存泄漏,因为context的生命周期和Application一样长,所以正确的单例写法如下
public class SMSVerifyManager {
private static final String TAG = "SMSVerifyManager";
private Context context;
private static SMSVerifyManager instance;
private SMSVerifyManager(Context context) {
this.context = context.getApplicationContext();
}
public static SMSVerifyManager getInstance(Context context) {
if (instance == null) {
instance = new SMSVerifyManager(context);
}
return instance;
}
}