문제 상황: 사용자 요청에 따라 FFmpeg을 사용해 오디오 파일 관련 작업을 쓰레드로 하고 있습니다. 이외에도 가사 출력, 오디오 플레이어 등과 함께 쓰레드가 돌고 있습니다. 헌데 다음과 같은 오류? 메세지? 를 발견했습니다. UI나 쓰레드의 버벅임이 혹시 이 때문인가 싶습니다.



관련 주요부문 코드 입니다.
case MotionEvent.ACTION_UP: {
long currentDuration = vAudioPlayer.getCurrentDuration();
if (mRecordThread != null) {
// 병합을 시작 ( combineList가 홀수일 때: 레코드 버튼을 눌렀을 때 combineList의 사이즈가 홀수가 된다 )
if (combineList.size() % 2 == 1) {
mRecordThread.stopFileWrite();
File waveFile = new File(RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/")
+ "_" + caltime(combineList.get(combineList.size() - 1) / 1000, false) + "_uv.pcm");
// 위의 경로에 해당 녹음 파일이 존재하면 wav 파일로 변환,
if (waveFile.exists()) {
copyWaveFile(RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/") + "_" + caltime(combineList.get(combineList.size() - 1) / 1000, false) + "_uv.pcm",
RecordActivity.currentCreateFileName.replaceAll("/ucc/", "/tmp/") + "_" + caltime(combineList.get(combineList.size() - 1) / 1000, false) + "_u0.wav");
// wav 볼륨 파일 증폭
if (mMp3ConcatThread != null) {
mMp3ConcatThread.startCombine(null, 3333333333333333333L, combineList.get(combineList.size() - 1), currentDuration);
}
}
combineList.add(currentDuration);
// startCombine Thread 분기 처리( if old_position: 0, 3333333333333333333L, 7777777777777777777L, 그 외 )
if (combineList.size() == 2) {
// 0: 처음 한번 녹음할 때
mMp3ConcatThread.startCombine(null, 0, combineList.get(combineList.size() - 2), currentDuration);
} else {
// 그 외: 두번 이상 녹음할 때
mMp3ConcatThread.startCombine(null, combineList.get(combineList.size() - 3), combineList.get(combineList.size() - 2), currentDuration);
}
}
vAudioPlayer.setSampleTranspo(false);
mRecordThread.setSampleTranspo(false);
}
}
// 버튼, 이미지 뷰 애니메이션
micBg1.setVisibility(View.GONE);
micBg2.setVisibility(View.GONE);
micBg1.clearAnimation();
micBg2.clearAnimation();
userImg.setImageBitmap(userBlurImg);
userImg.startAnimation(animZoomOut);
artistImg.setImageBitmap(artistImgBitmap);
artistImg.startAnimation(animZoomIn);
break;
}
return false;
}
});
질문 1: 이 메세지 (or 오류?)의 정확한 이유는 무엇인가요. Main 쓰레드가 과부하라면 UI 처리 해주는 부분에 과부하가 걸린다는 뜻인가요? 그렇다면 정확히 어느 부분에서 과부하가 걸리는지 알아낼 수 있는 방법을 모르겠습니다.
질문 2: 위 오류나 메세지가 나타나면 다른 쓰레드의 작업에도 영향을 주나요? 예를 들어 FFmpeg 오디오 처리를 하는 쓰레드의 작업도 skip 된다거나 하는 류의 문제가 있을 수 있나요?
시도 1: 찾아보니 이미지 리소스의 용량이 클 때 나타날 수 있다고 하여 이미지의 용량을 100kb 이하로 줄이고 사용해봤습니다. 현상은 똑같이 나타납니다. setImage 와 animation 하는 부분을 주석 처리하고 실행하니 skip되는 frame의 단위가 줄 뿐 현상은 계속해서 나타납니다.