#android
#Android
Вопрос:
У меня есть асинхронная задача, которая выполняется до того, как я перейду к следующему действию. Внутри этой асинхронной задачи у меня есть медиаплеер.
protected void onPause() {
stopProgress();
Log.i(TAG, "onPAUSE");
try {
} finally {
// If we allocated a player, then cleanup after it
if (player != null) {
player.reset();
player.release();
player = null;
Log.d(TAG,"end of player cleanup");
}
}
super.onPause();
}
Сценарий использования:
- Нажмите кнопку воспроизведения в упражнении 1
- Переходите к действию 2 еще до загрузки проигрывателя (определенно вызывается информация журнала из onPause).
- Во время выполнения действия 2 проигрыватель из действия 1 воспроизводится после завершения загрузки.
Ответ №1:
С AsyncTask ничего не должно произойти. Он будет продолжать выполняться. Однако это не лучший способ запустить медиаплеер в фоновом режиме (для этого используйте сервис). Ваш код отключит медиаплеер, но в зависимости от того, что у вас есть в вашей асинхронной задаче, он может быть все еще активен. Вы можете убедиться, что AsyncTask завершается вызовом cancel (boolean mayInterruptIfRunning)
задачи.
Если по какой-либо причине ваш MediaPlayer
объект все еще выполняется с использованием приведенного выше кода, то вызовите AsyncTask.cancel(true)
и переопределите void onCancelled (Result result)
, а затем завершите MediaPlayer
работу из вашего потока. Помните, onCancelled
будет вызываться только ПОСЛЕ doInBackground
возврата (или вы можете периодически проверять, isCancelled()
вызывалось ли что-то cancel()
в вашем потоке. Если вы установите cancel(true)
, то я полагаю, что это не будет беспокоить ожидание doInBackground
завершения, но, конечно, это не так чисто.
Ответ №2:
Я не знаю точно, что вы делаете в своей AsyncTask, но что бы это ни было, оно должно продолжаться, даже если оно onPause()
вызвано. Если onDestroy()
вызывается, и у вас есть AsyncTask, ссылающийся на что-либо в вашей деятельности, вы столкнетесь с проблемами, потому что AsycnTask, по сути, начнет выдавать исключения с нулевым указателем.
Комментарии:
1. при вызове onDestroy() асинхронная задача в нем должна быть отменена.