2011-11-10 48 views
5

Tôi có một AsyncTask được thực thi trước khi tôi chuyển sang Hoạt động tiếp theo. Bên trong AsyncTask này, tôi có một MediaPlayer.Điều gì sẽ xảy ra với AsyncTasks sau onPause?

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(); 
     } 

Sử dụng Kịch bản: nút play

  1. Bấm vào Hoạt động 1
  2. Move vào Hoạt động 2 trước khi người chơi thậm chí tải (đăng nhập thông tin từ onPause chắc chắn được gọi).
  3. Trong khi ở Hoạt động 2, trình phát từ Hoạt động 1 phát khi tải xong.

Trả lời

3

Không có gì xảy ra với AsyncTask. Nó sẽ tiếp tục chạy. Tuy nhiên, đây không phải là cách tuyệt vời để chạy trình phát đa phương tiện trong nền (sử dụng dịch vụ cho điều đó). Mã của bạn sẽ hủy trình phát đa phương tiện, nhưng tùy thuộc vào những gì bạn có trong AsyncTask, mã này vẫn có thể hoạt động. Bạn có thể đảm bảo rằng AsyncTask bị giết bằng cách gọi cancel (boolean mayInterruptIfRunning) về nhiệm vụ.

Nếu vì lý do gì, đối tượng MediaPlayer của bạn vẫn đang chạy bằng mã ở trên, sau đó gọi AsyncTask.cancel(true) và ghi đè void onCancelled (Result result) và sau đó giết số MediaPlayer từ trong chuỗi của bạn. Hãy nhớ rằng, onCancelled sẽ chỉ được gọi là SAU doInBackground trả về (hoặc bạn có thể kiểm tra định kỳ isCancelled() để xem có điều gì đó gọi là cancel() trên chủ đề của mình không.

1

Tôi không biết chính xác những gì bạn đang làm trong bạn AsyncTask, nhưng bạn nên giữ nó ngay cả khi nó được gọi là onPause(). Nếu onDestroy() được gọi và bạn có công cụ tham chiếu AsyncTask trong Hoạt động của mình, bạn sẽ gặp sự cố mặc dù vì AsycnTask về cơ bản sẽ bắt đầu ném ngoại lệ con trỏ null.

+0

thực sự, trong tác vụ, tôi đang đặt trình phát = new MediaPlayer() .... duh :) – hunterp

+1

khi onDestroy() được gọi, tác vụ không đồng bộ sẽ bị hủy trong đó. –

Các vấn đề liên quan