方法1:匿名內在類型。
faceView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1){
return false;
}
);
這是匿名的,因爲它是一個沒有名字的聲明。沒有OnTouchListener mytouch =
,只有聲明new OnTouchListener()
。這是內在的,因爲它在另一個類中,並且它是一個類型,因爲它是一個接口的實現。
OK,所以考慮到這一點。這種方法對於開發人員更方便。功能是孤立的(通常是通過聲明監聽),這很容易管理。但這種便利帶來了成本。假設你有十個onClickListeners按鈕。通過這種方法,每個新的匿名內部類型都會使垃圾收集隊列更快填滿。
但它有關係嗎?不是真的。如果您試圖從系統中獲得每微秒的性能,那麼一定不要使用這種方法。但通常情況下,這是可行的。
方法2:單繼承
public boolean onTouchEvent(MotionEvent event){
return false;
}
假設你看了上面的,這種方法也有創造和清理成本要低得多。實例化只有1個額外的類,並且只有1個對象添加到GC隊列中。
這是我使用的方法,並用了一段時間。這也是我在Google的示例源代碼中看到的。
但它並不完美!的onTouchEvent
實施會顯得如此:
public void onTouch(Event e){
if (e.equals(View1)){
}else if (e.equals(View2)){
}else if (e.equals(View 3)){
...}
SO
老實說,這並不重要。如果您希望獲得最高的性能,請使用靜態的onTouchEvent偵聽器,並且您不必支付上述費用,但大多數情況下它們並不昂貴。