2014-02-15 70 views
2

嗨我正在開發android應用程序,其中我有一個簡單的活動,其中包含按鈕來啓動新的活動。新活動包含表面視圖以顯示視頻。 我知道準備媒體播放器在主線程上工作,這就是爲什麼我使用prepareAsync。所以我的問題就是這樣。我點擊活動狀態按鈕,開始新的活動並開始加載視頻。如果我在視頻開始前點擊回來,即媒體播放器開始(),它會回到上一個活動。但是該活動的UI在一段時間內不活躍。這意味着我無法點擊開始按鈕一段時間。過了一段時間後,它再次活躍起來。有沒有人面臨同樣的問題。我的代碼如下所示:Android準備媒體播放器導致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.But仍然是相同的結果。 – nilkash

+0

http://stackoverflow.com/questions/7445145/mediaplayer-prepare-problem可能的重複? – palsch

回答

0

那麼這是一個普遍的問題,而視頻正在加載mediaplayervideoview。發生這種情況是因爲mediaplayer正在初始化您的視頻並準備播放。根據您的視頻尺寸和硬件,此延遲可能會導致延遲時間高達1-2秒。

現在要回答你的問題,你可以通過初始化媒體播放器在一個單獨的thread或你可以使用async task來處理它。如果您使用的是async,並且您已經使用它,則只需顯示一個progress可視化圖標供用戶等待。即使在android中,大多數媒體播放器都使用這種方法。

希望這會有所幫助。乾杯。:)