Android에서 배경 스레딩에 도움이 될만한 사람이 있는지 궁금합니다.Android - 백그라운드 스레딩을 올바르게 수행하는 방법?
나는 장치의 마이크에서 녹음 한 코드를 가지고 이어 피스 (1.5)를 통해 녹음 한 코드를 재생합니다.
스레드에서 실행하려고하지만 백그라운드 스레드로 실행하는 데 실패했습니다.
현재 활동을 실행하고 잠궈 모든 현상이 스레드가 실행되고 UI가 잠겨 있거나 걸려있는 것처럼 보입니다.
public class LoopProg extends Activity {
boolean isRecording; //currently not used
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AudioManager audio_service = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio_service.setSpeakerphoneOn(false);
audio_service.setMode(AudioManager.MODE_IN_CALL);
audio_service.setRouting(AudioManager.MODE_NORMAL,
AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
Record record = new Record();
record.run();
}
public class Record extends Thread
{
static final int bufferSize = 200000;
final short[] buffer = new short[bufferSize];
short[] readBuffer = new short[bufferSize];
public void run() {
isRecording = true;
android.os.Process.setThreadPriority
(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
int buffersize = AudioRecord.getMinBufferSize(11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioRecord arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
buffersize);
AudioTrack atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
buffersize,
AudioTrack.MODE_STREAM);
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
atrack.setPlaybackRate(11025);
byte[] buffer = new byte[buffersize];
arec.startRecording();
atrack.play();
while(isRecording) {
arec.read(buffer, 0, buffersize);
atrack.write(buffer, 0, buffer.length);
}
arec.stop();
atrack.stop();
isRecording = false;
}
}
}
사람이 백그라운드 스레드로이를 설정하는 방법에 나를 인도 할 수 있다면 궁금 : 여기
내가 그것을 할 시도 최신 방법은? 아니면 내가 놓친 것일 수있는 튜토리얼을 가르쳐 주시겠습니까? 사전
감사합니다. 하지만 backgrond 또는 worker 스레드로 실행하는 올바른 방법입니까? –
그것은 그것을하는 한 방법입니다. Thread 또는 Runnable을 구현하여 Java 방식으로 처리하거나 AsyncTask를 구현하여 Android 방식으로 처리 할 수 있습니다. 나는 개인적으로 내 애플 리케이션에서 구현하는 모든 백그라운드 스레드에 AsyncTask를 사용한다. –
고마워 mBaird, AsyncTask를 살펴 보겠습니다 –