2012-09-17 23 views
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); 
} 
+2

請參閱Android性能準則中的[避免創建不必要的對象](http://developer.android.com/guide/practices/performance.html#object_creation)。 – zapl

回答

3

它是匿名的事實是無關緊要的。你創建的每個對象實例都在堆上。如果你可以爲許多按鈕重用同一個監聽器,那麼一定要這樣做:它將需要更少的內存,並且會產生更少的垃圾。

2

是的,有一個簡單的規則:每次您執行new時,都會創建一個新對象。不要緊,你實例化的類是匿名的。

如果創建的對象都是相同的(即,您不關閉某個變化的變量),那麼用一個共享實例替換它們是個好主意。

0

1)是的,這需要時間。實際上,您不僅將偵聽器創建爲對象,而且還將其作爲類(但已經編譯)。

2)是的,它會更有效率。也就是說,除非您的聽衆需要大量資源,否則不會提高性能。決定增加的代碼複雜性是否值得。