주차를 돕기 위해 자동차에서 찾을 수있는 일종의 레이더를 구현하고 싶습니다. 바인더가 내 활동에 올바르게 연결된 서비스에서 짧은 사운드를 반복해야하는 스레드를 시작합니다. 짧은 기간 동안 wav (길이 110ms)가 변경됩니다. 이 코드를 사용하면 처음에는 첫 번째 루프가 사운드를 재생하지만 어려움을 겪고 빠르게 리듬을 잃게됩니다. 최악의 경우 서비스가 중단되지 않습니다. 가비지 컬렉터가 포화 상태입니다. 제대로 실현할 수있는 방법을 찾지 못했습니다. THXandroid : SoundPool을 사용하여 짧은 진화 시간으로 짧은 사운드 재생
public class MainService extends Service implements OnLoadCompleteListener{
private boolean soundradarloaded;
private SoundPool spoolradar;
private int soundradarID;
private Thread timerThread;
private boolean timerThreadrunning;
public int onStartCommand(Intent intent, int flags, int startId) {
soundradarloaded=false;
spoolradar = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundradarID = spoolradar.load(this, R.raw.beepradar1, 1);
spoolradar.setOnLoadCompleteListener(this);
timerThreadrunning=true;
timerThread=new Thread(new Runnable() {
@Override
public void run() {
int counter=0;
long offset=System.currentTimeMillis();
while(timerThreadrunning) {
// Traitement
longtime=System.currentTimeMillis()-offset;
if(soundradarloaded && longtime%400==0){//play every 400ms
spoolradar.play(soundradarID, 1, 1, 1, 0, 1f);
}
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
}
});
timerThread.start();
}
@Override
public void onLoadComplete(SoundPool arg0, int arg1, int arg2) {
if(arg0==spoolradar)
soundradarloaded=true;
}
@Override
public void onStop() {
timerThreadrunning=false;
try{
Thread.sleep(1);
}catch (InterruptedException ex) {
}
spoolradar.release(soundradarID);
}
}