美文网首页
Java 内存泄漏场景整理(2)

Java 内存泄漏场景整理(2)

作者: Franck2020 | 来源:发表于2020-01-30 22:57 被阅读0次

非静态内部类的静态实例

非静态内部类会持有外部类实例的引用,如果非静态内部类的实例是静态的,就会间接地长期维持着外部类的引用,阻止被系统回收。代码如下:

public class SecondActivity extends AppCompatActivity {

    private static Object inner;

    private Button button;

    @override

    protected void onCreate (Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.bt_next);

        button.setOnClickListener(new View.OnClickListener() {}

        @override

        public void onClick (View v) {

            createInnerClass();

            finish();

        }

    });

}

void createInnerClass () {

    class InnerClass {

    }

    inner = new InnerClass();

}

当点击Button时,会在inner = new InnerClass()语句处,创建非静态内部类InnerClass的静态实例inner,该实例的生命周期会和应用程序一样长,并且一直持有SecondActivity的引用,导致SecondActivity无法被回收。

相关文章

网友评论

      本文标题:Java 内存泄漏场景整理(2)

      本文链接:https://www.haomeiwen.com/subject/kjpwthtx.html