3

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

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

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

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

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

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

3 回答 3

3

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

于 2012-09-17T11:50:48.993 回答
2

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

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

于 2012-09-17T11:49:17.890 回答
0

1)是的,这需要时间。实际上,您不仅将侦听器创建为对象,而且创建为类(但那些已经编译)。

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

于 2012-09-17T11:50:15.670 回答