Android准备媒体播放器会导致UI阻塞

时间:2014-02-15 14:58:38

标签: android android-mediaplayer prepare

您好我正在开发Android应用程序,其中我有一个简单的活动,其中包含启动新活动的按钮。新活动包含显示视频的表面视图。 我知道准备媒体播放器在主线程上工作,这就是我使用prepareAsync的原因。所以我的问题是这样的。我点击活动状态按钮开始新活动并开始加载视频。如果我在视频开始之前点击返回,即媒体播放器启动(),它将返回上一个活动。但该活动的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();

            }
            });
    } 

如何避免这种情况。难道我做错了什么。需要帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

这是在mediaplayervideoview加载视频时遇到的常见问题。发生这种情况是因为媒体播放器正在初始化您的视频并准备播放。此延迟可能会导致延迟1-2秒,具体取决于您的视频大小和硬件。

现在回答您的问题,您可以通过在单独的thread中初始化媒体播放器来处理此问题,也可以使用async task来处理它。如果您使用async并且已经使用过它,则可以显示progress可视化,供用户等待。这种方法甚至被android中的大多数媒体播放器使用。

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

相关问题