非静态内部类的静态实例
非静态内部类会持有外部类实例的引用,如果非静态内部类的实例是静态的,就会间接地长期维持着外部类的引用,阻止被系统回收。代码如下:
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无法被回收。
网友评论