静态变量导致内存泄露
静态变量存储在方法区,它的生命周期从类加载开始,到整个进程结束。一旦静态变量初始化后,
它所持有的引用只有等到进程结束才会释放。
比如下面这样的情况,在 Activity 中为了避免重复的创建 info ,将 sInfo 作为静态变量:
public class MainActivity extends AppCompatActivity {
private static Info sInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (sInfo != null) {
sInfo = new Info(this);
}
}
}
class Info {
public Info(Activity activity) {
}
}
Info 作为 Activity 的静态成员,并且持有 Activity 的引用,但是 sInfo 作为静态变量,生命周期
肯定比 Activity 长。所以当 Activity 退出后, sInfo 仍然引用了 Activity , Activity 不能被回收,
这就导致了内存泄露。
在 Android 开发中,静态持有很多时候都有可能因为其使用的生命周期不一致而导致内存泄露,
所以我们在新建静态持有的变量的时候需要多考虑一下各个成员之间的引用关系,并且尽量少地
使用静态持有的变量,以避免发生内存泄露。当然,我们也可以在适当的时候讲静态量重置为 null,
使其不再持有引用,这样也可以避免内存泄露。