我想知道使用匿名听众是否是一个好习惯?
例如,我有50个项目的列表。它们中的每一个都有一个onClickListener
,它是使用匿名监听器实现的。这是否意味着我在堆中创建了50个新项目?
for (x;x;x) {
item.setOnClickListener(new OnClikListener() {
...
});
}
如果我只创建一个侦听器对象,然后将这50个列表项分配给该单个侦听器。会更有效率吗?
OnClickListener listener = new OnClickListener() {
...
};
for (x;x;x) {
item.setOnClickListener(listener);
}
答案 0 :(得分:3)
这是匿名的事实无关紧要。您创建的每个对象实例都在堆上。如果你可以为许多按钮重用相同的监听器,那么一定要这样做:它需要更少的内存,并且会产生更少的垃圾。
答案 1 :(得分:2)
是的,有一个简单的规则:每次执行new
时都会创建一个新对象。您实例化的类是匿名类并不重要。
如果创建的对象都是相同的(即你没有关闭某些变化的变量),那么用一个共享实例替换它们是个好主意。
答案 2 :(得分:0)
1)是的,需要时间。实际上,您不仅要将侦听器创建为对象,还要将其创建为类(但已经编译过了)。
2)是的,它会更有效率。也就是说,除非你的听众需要大量的资源,否则它不会提高性能。确定增加的代码复杂性是否值得。