我有一个AsyncTask,在我继续下一个Activity之前执行。在这个AsyncTask中,我有一个MediaPlayer。
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();
}
使用场景:
答案 0 :(得分:4)
AsyncTask什么都不应该发生。它将继续运行。但是,这不是在后台运行媒体播放器的好方法(使用服务)。您的代码将取消媒体播放器,但根据您在AsyncTask中的内容,它可能仍处于活动状态。您可以通过在任务上调用cancel (boolean mayInterruptIfRunning)
来确保杀死AsyncTask。
如果出于某种原因,您的MediaPlayer
对象仍在使用上面的代码运行,请调用AsyncTask.cancel(true)
并覆盖void onCancelled (Result result)
,然后从您的线程中终止MediaPlayer
。请注意,onCancelled
只会在doInBackground
返回后被调用(或者您可以定期检查isCancelled()
以查看某些内容是否在您的主题上调用cancel()
。如果您设置{{1}然后我相信它不会等待cancel(true)
完成,但当然不是那么干净。
答案 1 :(得分:2)
我不知道你在AsyncTask中究竟在做什么,但是即使它被调用也应该继续进行onPause()
。如果调用onDestroy()
并且您的Activity中有AsyncTask引用内容,那么您将遇到问题,因为AsycnTask基本上会开始抛出空指针异常。