最近转岗了,转到了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就没意义了