2012-09-17 3 views
3

익명 수신기를 사용하는 것이 좋은 방법인지 궁금합니다.익명 수신기가 힙 크기를 늘리십니까?

예를 들어 50 개의 항목 목록이 있습니다. 각각 익명 수신기를 사용하여 구현되는 onClickListener이 있습니다. 그것은 내가 힙에 50 개의 새로운 아이템을 생성한다는 것을 의미합니까?

그리고 방금 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) 예. 더 효율적입니다. 즉, 청취자가 많은 리소스를 필요로하지 않는다면 성능을 많이 향상시키지 못할 것입니다. 추가 된 코드 복잡성이 가치가 있는지 결정하십시오.

관련 문제