想知道是否有人可以幫助我在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或工作線程運行它的正確方法? – 2010-01-25 17:36:27
這是一種方法。你可以通過實現一個Thread或一個Runnable來實現Java方式,或者你可以通過實現一個AsyncTask來實現Android方式。我個人使用AsyncTask來處理在我的應用程序中實現的所有後臺線程。 – 2010-01-25 17:39:12
謝謝mBaird,將調查AsyncTask – 2010-01-25 17:53:56