单例模式导致的内存泄露
单例模式,很多时候我们可以把它的生命周期与整个程序的生命周期看做差不多的,所以是一个长生命周期的对象。如果这个对象持有其他对象的引用,也很容易发生内存泄露。
import android.content.Context;
public class Utils {
private Context mContext;
private static Utils utils;
private Utils(Context mContext) {
this.mContext = mContext;
}
public static Utils getInstance(Context mContext) {
if (utils == null) {
synchronized (Utils.class) {
if (utils == null) {
utils = new Utils(mContext);
}
}
}
return utils;
}
}
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Utils.getInstance(this);
}
}
我们在Activity中创建了一个SingleInstance,并且将Activity的实例this传递给了该类的对象,导致该单例对象持有了对应的Activity的引用。当我们Activity退出后,由于SingleInstance还存在,它的生命周期并没有结束,所以SingleInstance依然持有对Activity实例的引用,由于Activity有被引用,导致Activity的实例不能被回收,Activity会长时间的存在内存中。
解决方案:使用弱引用。
网友评论