簡體   English   中英

setOnClickListener的性能注意事項(this)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM