我在一些书中读到,使用内部类会使应用程序更大(每个内部类使用几KB),但是对性能有任何担忧吗?我看到了Google的示例代码中使用的内部类,但总的来说,是否鼓励在Android中使用内部类?
谢谢!
答案 0 :(得分:3)
1。如果想要在同一个类中实现接口方法超过1次且多于1种方式,内部类非常出色。
2. 匿名类是创建事件处理程序的最佳方式。
第3。使用顶级类(即静态内部类)将很轻,因为它更像是一个外部类,它没有对外部类的任何隐式引用。
<强> 4。非静态内部类将有点开销,因为它包含对外部类的隐式引用。
例如: 对于涉及隐含参考的内部类
例如:
public class outer{
int x = 10;
class inner{
int x=5;
public void go(){
System.out.println("Inner x: "+ this.x); // Prints x in Inner class
System.out.println("Inner x: "+ Outer.this.x); // Prints x in Outer class
}
}
}
答案 1 :(得分:2)
内部类,匿名类和常规类之间不应存在任何重要的代码大小差异。至于内部和常规之间的区别,你可以解压缩你的jar并看到为每个jar生成一个普通的.class文件。
所以不要对不必要的事情发誓,但它也不是“不惜一切代价避免”的情况。
答案 2 :(得分:1)
只要你使用静态内部类,你就可以了。静态内部类更适合于方便地安排类并适当地确定它们的范围。
非静态内部类不是这种情况,因为它们包含对包含它们的类的引用。这不仅很重,而且在Android中也很危险,因为持有类是实时的,即附加了Context。这可能会导致内存泄漏,从而可能泄漏整个应用程序。
这是一个非常相似的问题(关于活动中适配器的内部类的用户)和答案: What is the better way, keeping adapter as an inner class of activity or outside?