2014-02-15 107 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中,大多数媒体播放器都使用这种方法。

希望这会有所帮助。干杯。:)