最近转岗了,转到了xx广告部门,做xx广告sdk,之前跟这个部门合作过,还挺愉快,于是转岗时想都没想。谁知道过来是给无数前人擦屁股(填烂尾项目的坑),还是我太年轻,应该多考虑考虑再决定。
今天要解决一个内存泄露的问题,是因为前一个xx资深专家工程师把Activity的引用写到了一个单例里!我非常服气!
然后往下看,这个资深专家也是有一手的,试图用WeakReference解决这个问题。
大体代码如下:
public class TestSingle {
private Activity activity;
private WeakReference<Activity> activityWeakReference;
private static TestSingle ourInstance = new TestSingle();
public static TestSingle getInstance() {
return ourInstance;
}
private TestSingle() {
}
public void init(Activity activity){
activityWeakReference=new WeakReference<Activity>(activity);
activity=activityWeakReference.get();
doSomething(activity);
}
private void doSomething(Activity activity){
//.....
}
private void doSomething2(){
String name=activity.getLocalClassName();
}
}这样能行吗,activity对象还能被回收吗,直觉上是不行。
写了个demo试了下果然不行
一旦强引用了weakreference里的对象,那写weakreference就没意义了
本文讲述了作者转岗到广告部门后遇到的一个棘手问题——由前任资深工程师遗留下来的内存泄漏问题。该问题源于将Activity的强引用错误地保存在单例中,导致垃圾回收无法正常进行。文中详细分析了使用WeakReference尝试解决此问题的有效性,并通过实验验证其可行性。
676

被折叠的 条评论
为什么被折叠?



