0

타일을 그리드를 가로 질러 이동해야하는 그리드 + 타일 활동을 만들고 있습니다. 그리드 (및 타일)는 UI에 대한 별도의 스레드에서 surfaceView에 그려집니다 (UI는 터치 이벤트를 처리하고 그리드가 처리 할 대기열에 푸시합니다).Android - 캔버스에 안전하게 동시 액세스 하시겠습니까?

모두 괜찮습니다. 타일을 드래그 할 수있는 툴바가 있습니다. 툴바는 상대 레이아웃에 추가 된 뷰이며 UI 스레드에서 실행됩니다.

동기화를 사용하거나 캔버스가 동시에 쓰여지는 것을 막아 본 횟수에 관계없이 결국 여전히 원시 SIGSEV11이 발생합니다.

몇 가지 잠재적 인 솔루션 :

  • 넣어 모든 것을 하나 개의 스레드에 - 실패하거나 때문에 터치의 매우 느린 대
  • 은 하나의 스레드에서 캔버스에 액세스하는 모든 것을 그리는 것으로 보인다.

이렇게하면 며칠이 걸리는 엄청난 변화가 필요합니다.

다른 사람들이 비슷한 문제를 겪고 있으며 오류없이 캔버스에 대한 액세스를 동기화 할 수 있는지 궁금합니다.

많은 감사.

답변

0

하나의 스레드 만 화면을 업데이트 할 수 있지만 여러 스레드가 화면 뒤에서 데이터를 업데이트 한 다음 화면을 실제로 업데이트하도록 플래그를 설정하게 할 수 있습니다.

+0

하지만 격자를 지속적으로 업데이트하는 while 루프가 있으면 입력을 받아들이는 스레드에 문제가있을 수 있습니다. – alistair

관련 문제