我在接受采访时,以下内容应该是什么问题?
我可以假设这是一个问题,你无法检查一个类是否为空? 谢谢!
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();
}
}
}
答案 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以避免此类泄漏。