SurfaceView는 View를 상속받은 클래스로 Video Memory로 바로 접근하기 때문에 일반 View에서의 랜더링
속도보다 빠르다.
일반 View는 많은 그리기 작업을 하면 메인 스레드의 자원을 다 잡아먹어버리기때문에 상당히 느려지게 되는데
이러한 단점을 보완하기 위한 클래스라고 보면 된다
SurfaceView로부터 상속받을 경우 디폴트로 구현해야 할 메소드가 있다.
- public void onDraw (Canvas canvas) : 화면을 그린다.
- public void surfaceChanged() : 뷰가 변경될 때 호출된다.
- public void surfaceCreated() : 뷰가 생성될 때 호출된다.
- public void surfaceDestroyed() : 뷰가 종료될 때 호출된다.
그럼 셋팅은 끝. 사용되는건 surfaceCreated와 surfaceDestoryed 정도가 되겠다.
surfaceCreated는 처음 서피스뷰가 생성될 때 호출되는데, 주의할점은 백그라운드 상태로 내려갔다가, 다시 올라오게 되면
surfaceview가 다시 created된다는점이다. created에서 thread를 실행시키는 작업을 할 경우
반드시 스레드가 동작중인지 여부를 먼저 확인해야한다. 그렇지않으면 익셉션 발생
surfaceChanged는 업데이트를 대비해 만들었다, 뭐라뭐라 하던데 잘 모르겠다. 사용하지않는듯하다.
이제 SurfaceView 구성은 하였고, 실시간으로 그리기를 실행하려면 Thread를 구동해야한다.
private Class PaintThread extends Thread {
public void run() {
while(!this.isInterrupted()){ //스레드가 인터럽트 될 때까지 반복 실행.
if (그리기 실행조건) {
//그리기 실행
doDraw();
}
}
}
}
Reference
- https://blog.naver.com/muri1004/221054311714
'Dev > Android' 카테고리의 다른 글
[Android] App is not indexable by Google Search; consider adding at least one Activity with an ACTION-VIEW intent filter. (0) | 2019.10.10 |
---|---|
[Android] LocationManager 사용법 (0) | 2019.10.02 |
[해석] 모듈식 안드로이드 앱 아키텍쳐를 구축하라 (1) (Google I/O'19) (0) | 2019.09.09 |
[Android] AAC ViewModel 설정 및 ViewModelProviders.of() deprecated (0) | 2019.09.05 |
[요약] Android Jetpack: CameraX 라이브러리 알아보기 (Google I/O'19) (0) | 2019.09.04 |