0

我在某本书中读到使用内部类会使应用程序更大(每个内部类使用几个 KB),但是对性能有任何担忧吗?我在 Google 的示例代码中看到了内部类,但总的来说,在 Android 中是否鼓励使用内部类?

谢谢!

4

3 回答 3

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


                }
           }
       }
于 2012-07-12T04:45:37.967 回答
2

内部类、匿名类和常规类之间不应该有任何显着的代码大小差异。至于inner 和regular 的区别,你可以解压你的jar,看到每一个都会生成一个普通的.class 文件。

所以不要对不必要的事情发疯,但这也不是“不惜一切代价避免”的情况。

于 2012-07-12T04:36:16.397 回答
1

只要您使用静态内部类,就可以了。静态内部类更多是为了方便地安排类和正确地确定它们的范围。

非静态内部类不是这种情况,因为它们持有对持有它们的类的引用。这不仅很重,而且在 Android 中也很危险,当持有类是一个活的类时,即附加了一个上下文。这可能会导致内存泄漏,可能会泄漏整个应用程序。

这是一个非常相似的问题(关于活动中适配器的内部类的用户)和答案: 什么是更好的方法,将适配器保持为活动的内部类或外部?

于 2012-07-12T04:38:57.980 回答