[英]Performance considerations with setOnClickListener(this)
在Android / Java中,如果有按鈕,則可以通過兩種方式添加點擊監聽器:
1)
Button button = findViewById(R.id.my_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
- 要么 -
2)
Button button = findViewById(R.id.my_button);
button.setOnClickListener(this);
我有時更喜歡選擇#2,主要是出於簡潔的考慮,但對將整個類/上下文實質上傳遞給Listener的性能考慮感到好奇。
是否有人對此有任何想法/經驗?
我認為兩種方法都有效
一切都取決於您想做什么。 例如,如果屏幕上有許多按鈕,而您選擇使用第一個選項,則對於每個按鈕,您將需要一個新對象來處理單擊。 與第二種選擇相反,對象(活動)與偵聽器相同,您將消耗更少的資源,因為它將創建更少的對象(Java)。
另一方面,請記住該視圖包含對上下文的引用。
后一種方法顯然更有效:它所做的就是將this
已存在的對象的引用傳遞給setOnClickListener
,然后將其用於調用onClick
。
第一種方法在創建新對象(匿名內部類的實例)時效率略低。 主要區別在於創建新對象和存在其他類。
在處理周圍類和匿名內部類之間的變量事務時,您可能還會使用第一種方法產生一些開銷。 大多數問題(例如與線程相關的問題)都會影響這兩種方法。
總結起來,沒有真正的性能差異。 如果要創建很多按鈕,則應考慮共享View.OnClickListener
的單個實例。
我通常更喜歡匿名內部類(最大大小有限),因為它將實際上屬於周圍類的代碼與與偵聽器相關的代碼分開。
偵聽器實現的實際內容對性能的影響將比對setOnClickListener
的調用setOnClickListener
。 從setOnClickListener
的角度看,這兩個調用都是相等的,因為它們都傳遞了實現View.OnClickListener
的類的實例,無論是重用還是創建。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.