Fórum Executar Loop em Thread (Android Java) #619081
30/11/2022
0
Preciso executar pequenos loops de música em tempos determinados. Eu consigo executar com o código abaixo, fazendo um loop em um array que tem todos os loops de música, porém o Thread.sleep não deveria estar dentro de runOnUiThread e isso que está bloqueando a Interface do usuário (IU), sendo que se eu colocar fora dele, funciona normal, que é o correto, mas não teria como eu executar os sons em loop, executando um e parando, depois executando outro e assim por diante, até finalizar. Alguém saberia como resolver esse problema?
Thread.sleep precisa estar dentro de um loop, pois ele toca cada som em um tempo determinado, conforme mostra o código abaixo.
Thread.sleep precisa estar dentro de um loop, pois ele toca cada som em um tempo determinado, conforme mostra o código abaixo.
public class MainActivity extends AppCompatActivity {
private List<Music> list;
private SoundPool soundPool;
private int sound1, sound2, sound3, sound4, sound5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
soundPool = new SoundPool.Builder().setMaxStreams(10)
.setAudioAttributes(audioAttributes).build();
}
else {
soundPool = new SoundPool(6, AudioManager.STREAM_MUSIC, 3);
}
sound1 = soundPool.load(this, R.raw.sound1, 1);
sound2 = soundPool.load(this, R.raw.sound2, 1);
sound3 = soundPool.load(this, R.raw.sound3, 1);
sound4 = soundPool.load(this, R.raw.sound4, 1);
sound5 = soundPool.load(this, R.raw.sound5, 1);
list = new ArrayList<Music>();
list.add(new Music(sound1, 2000));
list.add(new Music(sound2, 2000));
list.add(new Music(sound3, 4000));
list.add(new Music(sound4, 2000));
list.add(new Music(sound5, 2000));
list.add(new Music(sound2, 2000));
list.add(new Music(sound1, 2000));
list.add(new Music(sound3, 4000));
list.add(new Music(sound1, 4000));
}
public void startMusic(View v) {
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < list.size(); i++) {
soundPool.play(((Music) list.get(i)).getId(), 3, 3, 1, 0, 1);
try {
Thread.sleep(((Music) list.get(i)).getTempo());
soundPool.autoPause();
soundPool.stop(((Music) list.get(i)).getId());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
}).start();
}
}
Marcos Arantes
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)