2011-11-28 25 views
13

Tôi có AsyncTask, nơi tôi ẩn chế độ xem video, bắt đầu phát lại video và hiển thị chế độ xem video khi video đang phát.VideoView không bắt đầu khi vô hình

Nhưng video sẽ không bắt đầu khi chế độ xem video được đặt thành ẩn, tác vụ không đồng bộ sẽ tiếp tục bị treo trong onBackground. Nếu tôi nhận xét ra dòng này, video sẽ bắt đầu phát. Tại sao chế độ xem video yêu cầu hiển thị bề mặt?

public void walk(final View v) { 

    new AsyncTask() { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mVideoView.setVisibility(View.INVISIBLE); // this line causes video not to start 
      mVideoView.start(); 
     } 

     @Override 
     protected Object doInBackground(Object... objects) { 
      while (!mVideoView.isPlaying()) {} 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Object o) { 
      super.onPostExecute(o); 
      mVideoView.setVisibility(View.VISIBLE); 
     } 

    }.execute(); 

Một chút nền tại sao tôi đang làm điều này: Tôi cố gắng để tránh những vấn đề nổi tiếng của đèn flash màu đen mà bạn thường có khi bắt đầu một video:

https://stackoverflow.com/search?q=%5Bandroid%5D+videoview+black

https://stackoverflow.com/search?q=%5Bandroid%5D+video+%5Bmediaplayer%5D+black

Trả lời

10

VideoView thực sự là một chuyên ngành SurfaceView. SurfaceView hoạt động bằng cách tạo một cửa sổ khác phía sau cửa sổ bình thường (chứa tất cả các khung nhìn), và sau đó có một vùng trong suốt để cửa sổ mới (với bề mặt bản vẽ của nó) có thể được nhìn thấy phía sau nó.

Nếu SurfaceView không còn hiển thị, bề mặt của nó sẽ bị hủy, tức là SurfaceHolder.Callback.surfaceDestroyed được gọi. VideoView sẽ không cố phát video nếu không có bề mặt hợp lệ, do đó AsyncTask của bạn sẽ không bao giờ có thể để lại doInBackground.

Bề mặt sẽ được tạo cho bạn trong khi cửa sổ SurfaceView hiển thị; bạn nên thực hiện surfaceCreated (SurfaceHolder) và surfaceDestroyed (SurfaceHolder) để khám phá khi Surface được tạo và phá hủy khi cửa sổ được hiển thị và ẩn.

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