我在某本书中读到使用内部类会使应用程序更大(每个内部类使用几个 KB),但是对性能有任何担忧吗?我在 Google 的示例代码中看到了内部类,但总的来说,在 Android 中是否鼓励使用内部类?
谢谢!
我在某本书中读到使用内部类会使应用程序更大(每个内部类使用几个 KB),但是对性能有任何担忧吗?我在 Google 的示例代码中看到了内部类,但总的来说,在 Android 中是否鼓励使用内部类?
谢谢!
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
}
}
}
内部类、匿名类和常规类之间不应该有任何显着的代码大小差异。至于inner 和regular 的区别,你可以解压你的jar,看到每一个都会生成一个普通的.class 文件。
所以不要对不必要的事情发疯,但这也不是“不惜一切代价避免”的情况。
只要您使用静态内部类,就可以了。静态内部类更多是为了方便地安排类和正确地确定它们的范围。
非静态内部类不是这种情况,因为它们持有对持有它们的类的引用。这不仅很重,而且在 Android 中也很危险,当持有类是一个活的类时,即附加了一个上下文。这可能会导致内存泄漏,可能会泄漏整个应用程序。
这是一个非常相似的问题(关于活动中适配器的内部类的用户)和答案: 什么是更好的方法,将适配器保持为活动的内部类或外部?