2011-11-10 44 views
5

我有一个AsyncTask在执行下一个活动之前执行。在这个AsyncTask里面,我有一个MediaPlayer。onPause后AsyncTasks会发生什么?

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中的玩家在完成加载时播放。

回答

3

AsyncTask什么都不应该发生。它将继续运行。但是,这不是在后台运行媒体播放器的好方法(为此使用服务)。您的代码将取消媒体播放器,但取决于您在AsyncTask中的内容,它可能仍然处于活动状态。您可以通过在任务上调用cancel (boolean mayInterruptIfRunning)来确保AsyncTask已被杀死。

如果因任何原因,你的MediaPlayer对象是使用上面的代码仍然在运行,然后调用AsyncTask.cancel(true)并覆盖void onCancelled (Result result),然后从你的线程中杀死MediaPlayer。请记住,onCancelled才会被调用后doInBackground收益(或者你可以定期检查isCancelled()来看看是否有号召你的线程cancel()。如果设置cancel(true)那么我相信它不会打扰等待doInBackground来完成,当然这是

1

我不知道你在做什么AsyncTask,但它永远不会停止,即使它被调用。如果onDestroy()被调用,并且你的Activity中有AsyncTask引用的东西,你会遇到问题,因为AsycnTask基本上会开始抛出空指针异常。

+0

实际上,在任务中,我设置了player = new MediaPlayer().... duh :) – hunterp

+1

当onDestroy()被调用时,异步任务应该被取消。 –