나는 배경 구성 작업 (UI 구성 요소에서 필요한 경우 포함)을 정상적으로 중지시키기위한 소멸자가있는 C++ 배경이 더 많습니다. 저는 wav 파일을 시각적으로 렌더링하고 싶은 작은 안드로이드 프로젝트를 만들고 있습니다. 나는 어떤 라이브러리를 사용하는 것에 관심이 없으며, 다른 어떤 것보다 더 많은 운동을합니다.Android View 객체는 백그라운드 스레드를 관리하는 것이 일반적입니까?
효과적으로 WavFile 개체 (내가 작성한 작은 RIFF 구문 분석 프레임 워크를 사용하여 설계 한 개체)를 제공 할 수있는 View 개체를 만들려고합니다. 이 View 구성 요소의 목표는 다양한 줌 레벨에서 파형을 렌더링 할 수 있도록하는 것입니다.
주 뷰 개체 (WavView)는 HorizontalScrollView를 확장하고 단일 파형 렌더러 자식을가집니다. 아이디어는 확대/축소 비율이 증가함에 따라 자식이 가로로 커질 수 있기 때문에 확대 된 파형을 스크롤 할 수 있습니다.
확대/축소 비율이 증가함에 따라보기는 읽는 샘플의 축소 범위를 줄입니다. 감소 범위가 500 인 경우, 감소 된 데이터 세트의 각 샘플은 감소됩니다 [0] = 평균 (소스 [0, 499]), 감소 [1] = 평균 (소스 [500, 999] 는 WavView 객체의 너비를 기반으로 동적으로 계산되므로 기본적으로 확대/축소 비율은 1입니다. 즉 파형이 WavView 내부에 정확하게 들어 맞습니다 (예 : 스크롤하지 않음).
이것은 줌 비율이나 부모 너비가 변경 될 때마다 웨이브 파일을 읽고 줄이기 범위를 기반으로 모든 축소를 수행해야한다는 것을 의미합니다. 데이터 구문 분석을 위해 설계 한 프레임 워크는 해당 데이터를 재생할 때도 유용해야합니다. wav PCM 샘플은 리틀 엔디안이므로이 프레임 워크는 재생과 함께 사용할 수 있도록 빅 엔디안으로 변환합니다.
이 모든 것은 저렴하지 않으며 별도의 스레드에서 수행해야합니다. 모든 유형의 기능을 캡슐화하여 웨이브 파일을 전달하고 렌더링 할 수있게하고 싶습니다. 샘플을 줄이면 부모는 진행 표시기를 표시하고 완료되면 렌더링 된 파형을 표시합니다.
하지만 내가 설정 한 다른 파일 또는 활동이 죽거나 단순히 레이아웃 트리에서 뷰가 제거되는 경우를봤을 때 분명히 스레드를 중지해야합니다. 안드로이드 뷰가 일반적으로 구현하는 것입니까? 다른 방법으로해야합니까? 최대한 많은 캡슐화를 유지하고 싶습니다.
EDIT : AsyncTask는이 작업을 수행하는 데 유용한 것으로 보입니다.
답장을 보내 주셔서 감사합니다. 이것은 실제로 내가 파일을 파싱하고 비트 맵으로 그리는 것을 처리 할 계획이었습니다. 왜냐하면 onDraw 중에 수백 포인트의 경로를 그리는 것이 저렴하지 않기 때문입니다. 나는 그 부분을 언급하지 않았다는 것을 깨닫지 못했다. (이미 많은 텍스트가있다.) 각 뷰 인스턴스가 별도의 드로잉 드로잉 스레드를 관리해야하는지 여부를 파악하고 있었지만, 단일 작업 큐가 각 파싱을 처리하고 동시에 많은 작업을 처리하는 것이 더 나을지도 모른다. –