Не очень хорошая идея, чтобы намеренно включать такого рода задержки в пользовательском интерфейсе, потому что это заблокирует практически все, что пользователь пытается сделать в течение этих нескольких секунд.Я предполагаю, что ваш startPlaying()
включает в себя вызов prepare()
, а также start()
.При получении данных из источника, который не будет немедленно доступен (например, из потока), вы должны использовать вместо него prepareAsync()
, который начнет подготовку и немедленно вернется вместо блокировки, пока подготовка не будет завершена.
Выможете прикрепить обратный вызов к вашему MediaPlayer
, чтобы затем выполнить действие после завершения подготовки через MediaPlayer.OnPreparedListener
. Вот простой пример.Обратите внимание, что ваш OnClickListener может оставаться прежним, если вы измените prepare()
в методе startPlaying()
на prepareAsync()
и удалите вызов start()
из startPlaying()
.
startbutton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
tvBuffering.setText("Buffering...");
startPlaying(); //which should call prepareAsync() instead of prepare()
//and have no call to start()
}
});
mYourMediaPlayer.setOnPreparedListener( new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
start();
tvBuffering.setText(" ");
}
});