Android 内存泄漏 - 匿名类

拉姆·库马尔

下面的代码会导致内存泄漏吗?假设方法在Activity中

        public void main(){
        final Object obj = new Object();
        Runnable run = new Runnable() {
            @Override
            public void run() {
                Thread.sleep(25000);//sleep
                obj.hashCode();//do something
            }
        };
          new Thread(run).start();
    }

这会导致泄漏吗?由于线程引用在其外部创建的对象

谢谢拉姆

蒂亚戈·瓦莱

是的,线程不遵循 Activity 生命周期,因此如果您创建一个线程并且 Runnable 是一个匿名类,它将具有对 Activity 的隐式引用,因为 java 将创建一个内部类。

如果 Activity 方向更改或任何其他类型的配置更改 Android 将销毁 Activity 并创建一个新的 Activity,但是,垃圾收集器无法将其释放,因为线程被视为 GC 根,最终效果是您将拥有内存中的 2 个活动,直到您的线程结束。如果您的线程在配置更改之前结束,您就可以了,但这不是推荐的做法,因为您通常无法保证这一点。

一个解决方案是将 runnable 声明为内部静态类或外部类,并且当发生配置更改时,对您在 Thread/Runnable 中拥有的活动的任何引用都会传递新活动的引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android动画内存泄漏

来自分类Dev

继承的类内存泄漏

来自分类Dev

Android Fragment Webview内存泄漏

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

Android runOnUiThread导致内存泄漏

来自分类Dev

Android WebView发生内存泄漏

来自分类Dev

防止Android中的内存泄漏

来自分类Dev

Android WeakReference处理内存泄漏

来自分类Dev

扩展类时内存泄漏

来自分类Dev

匿名可运行和内存泄漏

来自分类Dev

不使用匿名类添加操作侦听器会导致内存泄漏吗?

来自分类Dev

C ++:内存泄漏;类矢量类

来自分类Dev

Android内部类的内存泄漏和上下文泄漏?

来自分类Dev

Textview上的Android内存泄漏-LeakCanary(泄漏可以忽略)

来自分类Dev

Android中内存泄漏的潜在原因

来自分类Dev

非常简单的Android应用中的内存泄漏

来自分类Dev

结合RxJava了解Android内存泄漏

来自分类Dev

Android VideoView Http实时流内存泄漏

来自分类Dev

Android进度条内存泄漏

来自分类Dev

这是iOS / Android上的内存泄漏吗

来自分类Dev

Android套接字-内存泄漏-传入消息

来自分类Dev

Android VideoView Http实时流内存泄漏

来自分类Dev

Android:由于成员变量导致内存泄漏?

来自分类Dev

在Android片段上获取内存泄漏

来自分类Dev

这是Android中的内存泄漏吗

来自分类Dev

Android-这是内存泄漏吗?

来自分类Dev

Android内存泄漏自定义视图

来自分类Dev

Android 应用程序和内存泄漏

来自分类Dev

Android Studio Java ANR 内存泄漏