Android'de arkaplan üzerinde herkesin bana yardımcı olup olmadığını merak ediyordum.Android - arka plan iş parçacığı nasıl düzgün yapılır?
Cihazın mikrofonundan kaydettiğim bir parça kodum var ve daha sonra kulak parçasından (1.5'de) kaydettiği bilgileri çalar.
Bir iş parçacığında çalıştırmaya çalışıyorum, ancak arka plan iş parçacığı olarak çalıştırılmasında başarısız oldum.
Şu anda etkinliği çalıştırır ve kilitler, böylece tüm o sırada iş parçacığı çalışır ve kullanıcı arabirimi kilitlenir veya asılı görünüyor.
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;
}
}
}
herkes bir arka plan iplik çevirmeye nasıl bana yol acaba: Burada
bunu yapmaya çalıştım en son yoldur? Ya da belki de özlemiş olabileceğimiz alakalı bir öğreticiye işaret edebilirmiyim? peşin
Teşekkürler, bunu sıraladı. Ancak bu, bir iş parçacığı veya çalışan iş parçacığı olarak çalıştırmak için doğru yol? –
Bunu yapmanın bir yolu. Bir Thread veya Runnable'ı uygulayarak Java yolunu yapabilir veya AsyncTask'ı uygulayarak Android yolunu yapabilirsiniz. Uygulamalarımda uyguladığım tüm arka plan konuları için AsyncTask'ı kişisel olarak kullanıyorum. mBaird, AsyncTask –
sayesinde Bu yüzden bir arka plan iş parçacığı yapmak için çalıştırılabilir uygulamak gerekiyor? –