onPause后AsyncTasks会发生什么?

时间:2011-11-10 21:54:51

标签: android

我有一个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();
         }

使用场景:

  1. 点击活动1中的播放按钮
  2. 在播放器加载之前转到活动2(肯定会调用来自onPause的日志信息)。
  3. 在活动2中,活动1中的玩家在完成加载时播放。

2 个答案:

答案 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基本上会开始抛出空指针异常。