2014-02-15 4 views
2

Привет, Я разрабатываю приложение для Android, в котором у меня есть одна простая деятельность, содержащая кнопку для запуска новой активности. новая активность содержит вид поверхности для показа видео. Я знаю, что подготовка медиаплеера работает в основном потоке, поэтому я использую prepareAsync. Так моя проблема такая. Я нажимаю кнопку активности stat, которая запускает новую активность и запускает загрузку видео. Если я вернусь до начала видео, т. Е. Нач. Медиаплеера(), он вернется к предыдущему действию. Но пользовательский интерфейс этой активности неактивен в течение некоторого времени. Это означает, что я не могу нажимать кнопку запуска в течение некоторого времени. Через некоторое время он снова активируется. Есть ли кто-то, столкнувшись с одной и той же проблемой. Мой код выглядит так:Android для подготовки медиа-проигрывателя вызывает блокировку пользовательского интерфейса

@Override 
    public void surfaceCreated(SurfaceHolder arg0) { 
     // TODO Auto-generated method stub 
     Log.i("FFFFFFFFFFFFFFFFFFF ", "FFFFFFFFFFFFFFFFFFF "); 

     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mediaPlayer.setDisplay(surfaceHolder); 

     try { 
      mediaPlayer.setDataSource(getApplicationContext(), targetUri); 
      mediaPlayer.prepareAsync(); 
      //mediaPlayer.prepare();  
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       // TODO Auto-generated method stub 

       mediaPlayer.start(); 

      } 
      }); 
    } 

Как избежать этой ситуации. Я делаю что-то неправильно. Нужна помощь. Спасибо.

+0

Вы пробовали вызывать mediaPlayer.release() в onBackPressed? – Niko

+0

Да, я делаю mediaPlayer.release() внутри onDestroy. тоже сделав медиаPlayer = null.But еще такой же результат. – nilkash

+0

Возможный дубликат http://stackoverflow.com/questions/7445145/mediaplayer-prepare-problem? – palsch

ответ

0

Ну, это общая проблема, возникающая во время загрузки видео на mediaplayer или videoview. Это происходит потому, что медиаплеер инициализирует ваше видео и готовит его к игре. Это отставание может привести к задержке до 1-2 секунд в зависимости от вашего размера видео и оборудования.

Теперь, чтобы ответить на ваш вопрос, вы можете справиться с этим путем либо инициализации медиаплеера в отдельном thread, либо вы можете обработать его, используя async task. Если вы используете async и, как вы уже использовали его, вы можете просто показать визуализацию progress, чтобы пользователь мог подождать. Этот подход используется даже большинством медиапланеров в android.

Надеюсь, это поможет. Cheers. :)