서피스 뷰와 뷰의 차이점은 무엇입니까?
A를 사용하는 것이 필요하거나 더 나은 경우는 언제가 더 나을까요?SurfaceView에 대신에View?
보기는 모든 사용자 상호 작용에 사용되는 동일한 GUI 스레드에 그려집니다.
을 미치는 에는 GUI를 사용합니다.SurfaceView.
몇 가지 주목한 점은 다음과 같습니다.
- 표면 보기에는 핸들러(애니메이션에 적합)를 사용하지 않고 스레드가 표면의 내용을 업데이트할 수 있는 멋진 렌더링 메커니즘이 포함되어 있습니다.
- 지표면 뷰는 투명할 수 없으며 뷰 계층구조의 다른 요소 뒤에만 나타날 수 있습니다.
- 뷰로 렌더링하는 것보다 애니메이션이 훨씬 빠르다는 것을 알게 되었습니다.
자세한 내용(및 좋은 사용 예)은 SDK의 예제 섹션에 있는 Lunar Lander 프로젝트를 참조하십시오.
업데이트 05/09/2014
알겠습니다. 지금 공식 문서가 있습니다.그것은 제가 언급한 모든 것을 더 좋게 말해주었습니다.
자세한 내용은 여기를 참조하십시오.
예, 주요 차이점은 surfaceView는 백그라운드 스레드에서 업데이트할 수 있습니다.하지만 당신이 신경 쓸만한 것들이 더 있습니다.
surfaceView에는 전용 지표면 버퍼가 있지만 모든 뷰는 ViewRoot에 의해 할당된 하나의 지표면 버퍼를 공유합니다.즉, surfaceView는 리소스 비용이 더 많이 듭니다.
surfaceView는 하드웨어 가속이 불가능하며(JB4.2 기준), 일반 View의 95% 작업은 open GLES를 사용하여 HW 가속됩니다.
사용자 지정 지표면 보기를 작성하려면 더 많은 작업을 수행해야 합니다.생성/파괴 이벤트 표면을 청취하고, 렌더 스레드를 생성해야 하며, 더 중요한 것은 렌더 스레드와 메인 스레드를 동기화해야 합니다.나를자면만면다다면euosol면를do자,e,ew
onDraw방법.- 업데이트하는 타이밍이 다릅니다.일반 보기 업데이트 메커니즘은 프레임워크에 의해 제한되거나 제어됩니다.니가 전화해요
view.invalidateUI 에서드view.postInvalid보기를 업데이트해야 한다는 것을 프레임워크에 나타내기 위해 다른 스레드.그러나 뷰가 즉시 업데이트되지는 않지만 다음 VSYNC 이벤트가 도착할 때까지 기다립니다.VSYNC를 쉽게 이해할 수 있는 방법은 60fps 화면에 대해 16ms마다 시동을 거는 타이머라고 생각하는 것입니다.Android에서는 모든 정상적인 보기 업데이트(및 디스플레이는 하지만 오늘은 말하지 않겠습니다)가 VSYNC와 동기화되어 더 나은 매끄러움을 얻을 수 있습니다.이제 뷰 표면으로 돌아가서 원하는 대로 언제든지 렌더링할 수 있습니다.하지만 앞서 말한 것처럼 디스플레이도 VSYNC와 동기화가 되어 있어서 장점인지는 잘 모르겠습니다.
큰 은 은 은 SurfaceView 수 경로릴수만,만수릴,Views못한다.SurfaceViews더 많은 리소스를 사용할 필요가 없는 한 사용하고 싶지 않습니다.
A SurfaceView는 안드로이드의 사용자 정의 뷰로, 그 안에서 그릴 수 있습니다.
a요은의aView그리고.SurfaceView(View)는우가enstasw뷰(w)>UI Thread 상호 에 됩니다 됩니다 에 .
UI를 충분히 빠르게 업데이트하고 충분한 양의 정보를 렌더링하려면 SurfaceView가 더 나은 선택입니다.
인 가 에는 몇 가지 인 내부가 .SurfaceView:
1.하드웨어 가속이 아닙니다.
2.메소드를 호출하면 일반 뷰가 렌더링됩니다.invalidate아니면postInvalidate()A, 되는 을 는 가 (A)).VSYNC전송될 것이고, OS는 언제 업데이트 될 것인지 결정합니다.SurfaceView즉시 업데이트 할 수 있습니다.
3.SurfaceView에 할당됨surface buffer, 그래서 비용이 더 많이 듭니다.
표면 뷰와 뷰의 주요 차이점 중 하나는 일반 뷰의 화면을 새로 고치기 위해 뷰가 정의된 동일한 스레드에서 무효화 메서드를 호출해야 한다는 것입니다.하지만 무효화를 부르더라도 리프레시가 바로 이루어지지는 않습니다.VSYNC 신호가 다음에 도착한 후에만 발생합니다.VSYNC 신호는 16.6ms마다 발생하는 커널 생성 신호 또는 초당 60프레임이라고도 합니다.따라서 화면의 새로 고침을 더 많이 제어하고 싶다면(예: 매우 빠르게 움직이는 애니메이션) 일반 보기 클래스를 사용해서는 안 됩니다.
반면, 서페이스 뷰의 경우 화면을 원하는 만큼 빠르게 새로 고침 할 수 있으며 배경 스레드에서 할 수 있습니다.따라서 표면 뷰의 새로 고침은 실제로 VSYNC에 의존하지 않으며, 이는 고속 애니메이션을 수행하고자 할 때 매우 유용합니다.저는 이 모든 것들을 잘 설명해주는 트레이닝 비디오와 예시적인 어플리케이션이 거의 없습니다.다음 교육 동영상을 확인해 주시기 바랍니다.
클래식 보기 클래스가 아니라 SurfaceView를 사용하는 이유...
주된 이유 중 하나는 SurfaceView가 화면을 빠르게 렌더링할 수 있기 때문입니다.
간단히 말해서 SV는 애니메이션을 렌더링하고 타이밍을 관리할 수 있습니다.
SurfaceView가 무엇인지 더 잘 이해하려면 View 클래스와 비교해야 합니다.
뭐가 다른거죠?비디오에서 이 간단한 설명을 확인합니다.
https://m.youtube.com/watch?feature=youtu.be&v=eltlqsHSG30
View와 관련하여 한 가지 중요한 문제가 있습니다.애니메이션을 렌더링하는 타이밍
일반적으로 onDraw()는 Android 런타임 시스템에서 호출됩니다.
따라서 Android 런타임 시스템이 Draw()를 호출하면 응용프로그램이 제어할 수 없습니다.
전시 시기, 그리고 이것은 애니메이션에 있어서 중요합니다.시간의 차이가 있습니다.
애플리케이션(당사 게임)과 Android 런타임 시스템 사이에.
SV는 전용 스레드에 의해 onDraw()를 호출할 수 있습니다.
따라서 애플리케이션은 타이밍을 제어합니다.그래서 애니메이션의 다음 비트맵 이미지를 표시할 수 있습니다.
언급URL : https://stackoverflow.com/questions/1243433/difference-between-surfaceview-and-view
'programing' 카테고리의 다른 글
| LinkedList - malloc을 사용하여 할당된 메모리를 해제하는 방법 (0) | 2023.09.12 |
|---|---|
| Android 버튼이 On으로 설정되었습니다.TouchListener가 호출되었지만 performClick을 재정의하지 않습니다. (0) | 2023.09.12 |
| php zip 내부의 파일에 대한 경로 없이 zip 생성 (0) | 2023.09.12 |
| 새로 추가된 입력 요소에 초점을 맞춥니다. (0) | 2023.09.12 |
| MariaDB 쿼리 JSON 결과는 텍스트 열에서 \\"라는 큰따옴표를 벗어납니다. (0) | 2023.09.12 |