采访 - Android代码

时间:2015-05-26 14:24:48

标签: android

我在接受采访时,以下内容应该是什么问题?

我可以假设这是一个问题,你无法检查一个类是否为空? 谢谢!

public class NiceActivity extends Activity {

    private static AmazingClass a;

    class AmazingClass {
        int x;
        int y;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_nice);
        if (a == null) {
            a = new AmazingClass();
        }
    }
}

2 个答案:

答案 0 :(得分:4)

内部类不是静态的,这可能导致它在仍然具有对它的引用时超过活动。这可能会导致活动泄漏。

本文更深入地解释了这个问题: http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html

答案 1 :(得分:1)

由于内部类AmazingClass不是静态的,因此每个实例都有一个对外部类的隐式引用(NiceActivity)。

NiceActivity类有一个对AmazingClass的引用,这个引用永远不会被清除。

因此,活动永远不会被垃圾收集,并且会有内存泄漏。

在架构中,大致如下所示:

root GC -1-> Activity class -2-> Amazing object -3-> Activity object

需要清除参考编号2或3以避免此类泄漏。