접근법 1 : 익명 내부 유형.
faceView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View arg0, MotionEvent arg1){
return false;
}
);
이것은 이름이없는 선언이므로 익명입니다. OnTouchListener mytouch =
이 없으며 new OnTouchListener()
선언 만 있습니다. 이 클래스는 다른 클래스 안에 있기 때문에 내부 클래스이며, 이는 인터페이스 구현이므로 하나의 유형입니다.
좋습니다. 이 접근법은 개발자에게 더 편리합니다. 기능은 격리되어 있으며 (일반적으로 청취 가능 선언) 쉽게 관리 할 수 있습니다. 그러나 이러한 편의성에는 비용이 따릅니다. 10 개의 onClickListener가있는 버튼이 있다고 가정합니다. 이 방법을 사용하면 새 익명 내부 유형마다 가비지 수집 대기열이 빠르게 채워집니다.
하지만 상관이 있습니까? 그렇지 않아. 시스템에서 1 마이크로 초의 성능을 얻으려고한다면이 방법을 사용하지 마십시오. 그러나 일반적으로, 이것은 실행 가능합니다.
접근법 2 : 단일 상속
public boolean onTouchEvent(MotionEvent event){
return false;
}
위 읽어 가정은,이 방법은 생성 및 정리를위한 훨씬 낮은 비용을 가지고있다. 인스턴스화 된 추가 클래스는 1 개 뿐이며 GC 큐에 추가 된 객체는 1 개뿐입니다.
이것은 내가 사용하는 접근 방식이며 잠시 동안 사용했습니다. 또한 Google의 샘플 소스 코드에서 볼 수 있습니다.
하지만 완벽하지는 않습니다! onTouchEvent
의 구현은 다음과 같은보고 끝날 것 :
public void onTouch(Event e){
if (e.equals(View1)){
}else if (e.equals(View2)){
}else if (e.equals(View 3)){
...}
는 SO
는 솔직히, 그건 문제가되지 않습니다. 가능한 한 최고의 성능을 원한다면 정적 onTouchEvent 리스너를 사용하면 위에 언급 한 비용을 지불 할 필요가 없지만 대부분 비용이 많이 들지는 않습니다.