2014-02-15 3 views
2

안녕하세요, 저는 새로운 활동을 시작하는 버튼이 포함 된 간단한 활동이있는 Android 애플리케이션을 개발 중입니다. 새로운 액티비티에는 비디오를 보여주는 표면 뷰가 포함됩니다. 준비 스레드가 주 스레드에서 작동하므로 prepareAsync를 사용합니다. 그래서 내 문제는 이것 같다. 새로운 활동을 시작하는 활동 상태 버튼을 클릭하고 비디오를로드하기 시작합니다. 동영상 시작 전에 미디어 플레이어 시작()을 클릭하면 이전 활동으로 돌아갑니다. 그러나 해당 활동의 UI는 얼마 동안 활성화되지 않습니다. 즉, 몇 시간 동안 시작 버튼을 클릭 할 수 없다는 뜻입니다. 잠시 후 다시 활성화됩니다. 같은 문제에 직면 해있는 사람이 있습니까? 내 코드는 다음과 같습니다.안드로이드는 미디어 플레이어가 UI 차단을 준비하도록 준비했습니다.

@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

onBackPressed에서 mediaPlayer.release()를 호출 해 보았습니까? – Niko

+0

그래, onDestroy 안에 mediaPlayer.release()를하고있다. 또한 mediaPlayer = null입니다.하지만 여전히 같은 결과입니다. – nilkash

+0

가능한 중복 http://stackoverflow.com/questions/7445145/mediaplayer-prepare-problem? – palsch

답변

0

동영상이로드되는 동안 자주 발생하는 문제는 mediaplayer 또는 videoview입니다. 이것은 미디어 플레이어가 비디오를 초기화하고 재생 준비를하기 때문에 발생합니다. 이 지연으로 인해 비디오 크기와 하드웨어에 따라 최대 지연 시간이 1-2 초가 될 수 있습니다.

귀하의 질문에 답변하려면 mediaplayer를 별도의 thread으로 초기화하거나 async task을 사용하여 처리 할 수 ​​있습니다. async을 사용하고 이미 사용한대로 progress 사용자가 시각화 할 수 있도록 표시 할 수 있습니다. 이것은 대부분의 미디어 플레이어가 심지어 android에 사용하는 방법입니다.

희망이 도움이됩니다. 건배 :