Привет, я новичок в программировании для Android. Моя проблема в том, что я хочу сделать задержку перед продолжением следующего цикла снова и снова в зависимости от размера моего массива, чтобы звуки не перекрывались.Как задержать действие внутри цикла for перед продолжением следующего цикла заново
Вот мой код:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
mp.start();
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
mp.start();
}
}
}
Я попытался с помощью Thread.sleep, но мне нужно, чтобы остановить воспроизведение звуков с помощью нажатия кнопок, но я не могу нажать на кнопку из-за Thread.sleep поэтому я должен игнорировать его использование. Но вот мой код для этого, если у кого-то есть решение для этого. Я уже пробовал Thread.currentThread.interrupt, но мои звуки перекрываются снова, когда я их использую.
кода с использованием Thread.sleep:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
mp.start();
try {
Thread.sleep(2000);
} catch (InterruptedException ie) {
// TODO Auto-generated catch block
}
}
}
}
Другим способом, который я попробовал это postDelayed, но кажется, что это не Отсрочка после первого цикла.
Вот мой код postDelayed:
protected void managerOfSound() {
int size = tempq.size();
for (int i = 0; i < tempq.size(); i++) {
String u =tempq.get(i);
//WHOLE
if (u.equals("a4")){
mp = MediaPlayer.create(this, R.raw.a4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}else if (u.equals("b4")){
mp = MediaPlayer.create(this, R.raw.b4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}else if (u.equals("c4")){
mp = MediaPlayer.create(this, R.raw.c4);
handler.postDelayed(new Runnable(){
@Override
public void run() {
mp.start();
}
},4000);
}
}
}
Я также попытался изменить, 4000 (я + 1) * 4000, как то, что другие предложили, но до сих пор ее не работает. И я также пробовал укладывать задержку за пределами if if else, но результат такой же.
Есть ли кто-нибудь, кто может предложить и помочь мне с моей проблемой? Пожалуйста. Я работаю в течение недели. Заранее спасибо.
создать новую нить и использовать сон, не используйте основной поток – Xcihnegn
НИКОГДА не используйте 'Sleep' на любом языке программирования или на любой платформе - это зло - особенно, когда речь идет о для Android. – Squonk
Я уже пробовал, но все равно. Я не могу нажать кнопку для остановки. – ALD