Android Activity内部持有当前Activity的静态实例是否会造成内存泄漏?

flycumt
  • 245

public class LoginActivity extends BaseActivity{

public static LoginActivity instance;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    instance = this;
    
    }

}

这样写是不是会造成内存泄漏,当Activity被销毁时,持有的instance实例会被释放吗

回复
阅读 5.3k
7 个回答

会。

当你敲那行代码时 Android Studio 就会告诉你,这么做会导致内存泄露,如下图
图片描述

如果你不改,在后续的代码检查分析里 IDE 还会告知你将会导致内存的问题,如下图
图片描述

Mrxxy
  • 367

会造成内存泄露,而且Android Studio会提示你这么做是会造成内存泄露的,建议你改正。如果实在想这么写,那么就请在Activity的onDestroy()方法中这么做

@Override
public void onDestroy() {
    super.onDestroy();
    instance = null;
}

如果你不进行手动释放,静态变量是会常驻内存,照样会导致当前Activity无法被回收。so应该还是会内存泄漏的

qmsggg
  • 1
新手上路,请多包涵

如果你不手动置为空,肯定会造成内存泄漏的,静态变量的生命周期和整个应用的生命周期是一样的。

会,最好不要静态强引用所有 Context 类型的对象

会造成泄露,初始化后退出APP,但destory中不释放,你可以试一下在一个静态广播中输出一下instance,看一下他的地址和一开始初始化时的instance是一样的,然后再从进mainactivity中地址又变了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏