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

发布于 2022-09-05 09:16:47 字数 364 浏览 20 评论 0

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实例会被释放吗

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

不可一世的女人 2022-09-12 09:16:47

会。

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

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

三人与歌 2022-09-12 09:16:47

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

@Override
public void onDestroy() {
    super.onDestroy();
    instance = null;
}
陌上芳菲 2022-09-12 09:16:47

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

九公里浅绿 2022-09-12 09:16:47

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

南汐寒笙箫 2022-09-12 09:16:47

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

甜妞爱困 2022-09-12 09:16:47

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文