Executar Loop em Thread (Android Java)
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 :)