Я создаю приложение для потокового радио.Все отлично работает, когда у меня хорошее интернет соединение, даже когда многозадачность.Проблема заключается в отсутствии или плохом интернет-соединении.
В тот момент, когда вы нажимаете кнопку воспроизведения, приложение зависает и возобновляет работу только при запуске аудиопотока.При медленном соединении это может занять несколько секунд, зависание приложения.Без Интернета приложение через некоторое время вылетает.
public class SoundService extends Service {
MediaPlayer mp;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate() {
mp = new MediaPlayer();
try {
mp.setDataSource("stream_url");
} catch (IllegalArgumentException e) {
e.printStackTrace();
Log.v(TAG, "Error 1");
onDestroy();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(TAG, "Error 2");
onDestroy();
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "Error 3");
onDestroy();
}
try {
mp.prepare();
mp.start();
} catch (IllegalStateException e) {
e.printStackTrace();
Log.v(TAG, "Error 4");
onDestroy();
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "Error 5");
onDestroy();
}
}
public int onStartCommand(Intent intent, int flags, int startId) {
mp.start();
return Service.START_NOT_STICKY;
}
public void onDestroy() {
mp.stop();
mp.release();
stopSelf();
super.onDestroy();
}
}
Вот так я запускаю поток (кнопка воспроизведения):
startService(new Intent(MainActivity.this, SoundService.class));
Без подключения приложение в итоге получает номер ошибки5, но это происходит только при сбоях, поэтому уже слишком поздно останавливать игрока.До этого я не получаю никаких "уловок".
В качестве временного решения я проверяю подключение к Интернету перед запуском потока.Таким образом я могу предотвратить сбой, но у меня все еще есть проблема с зависанием приложения на медленных соединениях.
Есть идеи?Спасибо!