나 자신에 의해 뷰를 구현하면 뷰의 onDraw 메서드가 반복적으로 호출됩니다. 이로 인해 심각한 성능 문제가 발생합니다. 코드가 너무 복잡해서 여기에 붙여 넣을 수 없습니다. 누구나 가능한 이유를 말해 줄 수 있니? 나는 내 손가락으로 시야를 만지지 않았다.안드로이드에서 View의 onDraw 메서드를 반복적으로 호출하는 조건은 무엇입니까?
답변
이유 중 하나는 onDraw
메서드가 (아마도 간접적으로)보기를 무효화하는 일부 메서드를 호출하는 것입니다. 또 다른 가능성은 프로그램에서 전혀 관련이없는 무언가가 다시 그리기를 일으키는 것입니다. 이 실험을 해보십시오 : 드로잉 코드를 주석으로 처리하고 단순한 선 그리기와 같은 간단한 것을 대체하여 작동하는지 확인하십시오. 반복되는 그림이 사라지면 코드가 onDraw
입니다. 문제가 다시 나타날 때까지 한 번에 한 번에 현재 코드를 복원하기 시작한 다음 추적 할 수 있습니다.
실험을 시도 할 때 문제가 해결되지 않으면 코드에서 다른 부분 (작업자 스레드 일 가능성이 있음)이 보이게되어보기가 무효화됩니다.
Eclipse의 검색 기능을 사용하여 invalidate() 메소드 또는 postInvalidate() 코드를 검색 할 수도 있습니다 (Fang Yeng이 Eclipse를 사용한다고 가정) – Kerry
Kerry와 Ted, 정말로 도움을 주셔서 감사합니다. 그리고 문제가 잘못된 장소에서'invalidate()'에 의해 발생한다는 것을 알았습니다. 문제 해결됨! –
오늘 같은 문제가있었습니다. 내보기 하위 클래스에서 invalidate()
를 재정 의하여 그것을 해결 :
@Override
void invalidate() {
super.invalidate();
}
은 그 때 나는
invalidate()
내부에 중단 점을 설정하고 치고 기다렸다. 그랬을 때, 나는 전화의 스택 트레이스와 기분 나쁜 발신자를 가지고 있었다. 수수께끼는 2 분 만에 해결되었습니다.
그래도 해결되지 않으면보기에서 다른 무효화 메서드를 재정의하는 것이 좋습니다.
- 1. 반복적으로 메서드를 호출하는 observable을 만듭니다.
- 2. OnDraw 메서드를 재정의하는 방법은 무엇입니까?
- 3. Thread를 반복적으로 호출하는 방법은 무엇입니까?
- 4. NSThread를 반복적으로 호출하는 방법은 무엇입니까?
- 5. 안드로이드에서 onDraw 메서드로 캔버스를 저장하는 방법은 무엇입니까?
- 6. 안드로이드에서 라이브러리 외부에서 Activity 메서드를 호출하는 방법
- 7. 재귀 메서드를 반복적으로 변경하기
- 8. iPhone에서 UIButton을 누른 상태에서 일부 메서드를 반복적으로 호출하는 방법
- 9. 생성자에서 thread.start() 메서드를 호출하는 방법과 메서드를 호출하는 것의 차이점은 무엇입니까
- 10. Android 앱에서 함수를 반복적으로 호출하는 방법은 무엇입니까?
- 11. remove() 메서드를 호출하는 방법은 무엇입니까?
- 12. Android보기의 onDraw() 메서드를 초당 30 회 호출해야합니까?
- 13. 안드로이드에서 디렉토리를 반복적으로 스캔하는 방법
- 14. 안드로이드에서 OnDraw 메서드의 경고 대화 상자 작업 방법
- 15. 안드로이드보기 onDraw() 질문
- 16. iterator와 view의 차이점은 무엇입니까?
- 17. onDraw 메서드를 통해 애니메이션이 진행되는 사용자 정의보기에서 비트 맵을 저장합니다.
- 18. MethodCallExpression에서 메서드를 호출하는 방법 #
- 19. 비동기 메서드를 호출하는 방법?
- 20. viewmodel에서 메서드를 호출하는 명령
- 21. wsdl에서 메서드를 호출하는 방법
- 22. 자바 메서드를 호출하는 방법
- 23. QT에서 ActiveX 메서드를 호출하는 방법?
- 24. 안드로이드에서 OnTabChanged 메서드를 사용하는 방법은 무엇입니까?
- 25. UITapGestureRecognizer에서 didSelectRowAtIndexPath 메서드를 호출하는 방법은 무엇입니까?
- 26. window.location을 사용하여 페이지 메서드를 호출하는 방법은 무엇입니까?
- 27. UITextview에 textViewShouldEndEditing 메서드를 호출하는 방법은 무엇입니까?
- 28. .NET에서 클래스의 메서드를 동적으로 호출하는 방법은 무엇입니까?
- 29. Android에서 다른 클래스의 메서드를 호출하는 방법은 무엇입니까?
- 30. 생성자에서 객체의 메서드를 호출하는 방법은 무엇입니까?
코드를 게시하면 문제를 해결하는 가장 좋은 방법입니다. :) –
약 70,000 줄의 코드가 포함 된 프로젝트가 다른 사람들에 의해 작성되었습니다. 그래서 코드를 붙여 넣지 않았습니다. 정말 미안 해요. 다음에 그런 일은 없을거야. –
나는 downvotes에 동의하지 않는다. 문제는 완벽하게 타당합니다 - 기본적으로 문제를 진단하는 방법에 대한 아이디어를 묻습니다. 거대한 코드 덤프를 게시하는 것보다 훨씬 낫습니다 ([Stack Overflow가 모든 것을 읽지는 않습니다] 참조) (http://meta.stackexchange.com/a/129787/156967)). –