匿名监听器会增加堆大小吗?

时间:2012-09-17 11:46:23

标签: java android listener

我想知道使用匿名听众是否是一个好习惯?

例如,我有50个项目的列表。它们中的每一个都有一个onClickListener,它是使用匿名监听器实现的。这是否意味着我在堆中创建了50个新项目?

for (x;x;x) {
   item.setOnClickListener(new OnClikListener() {
      ...
    });
}

如果我只创建一个侦听器对象,然后将这50个列表项分配给该单个侦听器。会更有效率吗?

OnClickListener listener = new OnClickListener() {
   ...
};

for (x;x;x) {
   item.setOnClickListener(listener);
}

3 个答案:

答案 0 :(得分:3)

这是匿名的事实无关紧要。您创建的每个对象实例都在堆上。如果你可以为许多按钮重用相同的监听器,那么一定要这样做:它需要更少的内存,并且会产生更少的垃圾。

答案 1 :(得分:2)

是的,有一个简单的规则:每次执行new时都会创建一个新对象。您实例化的类是匿名类并不重要。

如果创建的对象都是相同的(即你没有关闭某些变化的变量),那么用一个共享实例替换它们是个好主意。

答案 2 :(得分:0)

1)是的,需要时间。实际上,您不仅要将侦听器创建为对象,还要将其创建为类(但已经编译过了)。

2)是的,它会更有效率。也就是说,除非你的听众需要大量的资源,否则它不会提高性能。确定增加的代码复杂性是否值得。