onPause后AsyncTasks会发生什么?

hun*_*erp 6 android

在进入下一个Activity之前,我有一个AsyncTask.在这个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();
         }
Run Code Online (Sandbox Code Playgroud)

使用场景:

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

Dor*_*oro 4

AsyncTask 不应该发生任何事情。它将继续运行。然而,这并不是在后台运行媒体播放器的好方法(为此使用服务)。您的代码将取消媒体播放器,但根据您的 AsyncTask 中的内容,它可能仍然处于活动状态。cancel (boolean mayInterruptIfRunning)您可以通过调用任务来确保 AsyncTask 被终止。

如果出于某种原因您的MediaPlayer对象仍在使用上面的代码运行,则调用AsyncTask.cancel(true)并覆盖void onCancelled (Result result),然后MediaPlayer从线程内终止该对象。请记住,onCancelled只会在doInBackground返回后被调用(或者您可以定期检查是否有东西在您的线程上isCancelled()调用。如果您设置了,那么我相信它不会费心等待完成,但当然这不是那么干净。cancel()cancel(true)doInBackground