【问题标题】:Android MediaPlayer eventually causing app to stopAndroid MediaPlayer 最终导致应用停止
【发布时间】:2011-05-09 20:29:33
【问题描述】:

我有一个应用程序正在尝试调试有关使用媒体播放器的问题。我有一个活动显示,服务轮询其后面的服务器。 Activity 正在显示服务从服务器收集的动态状态。那效果很好。然后,我在服务使用的类中添加了一些代码,如果它看到特定的数据项,它就可以播放音频文件。最初几次效果很好,但随后应用程序将冻结,甚至最终会以可怕的力量关闭。
我在日志文件中看到以下内容。这是我担心的警告,我似乎找不到任何关于它们的信息。

11-14 10:12:29.742: WARN/AV(28909): #### Attempting to play audio ####
11-14 10:12:29.742: WARN/com.me.messaging.MessageMediator@43c0c518(28909): #### AV - Playing audio ####
11-14 10:12:29.772: INFO/QC_CORE(103): OMXCORE API - OMX_Init 
11-14 10:12:29.772: INFO/QC_CORE(103): OMXCORE API - OMX_ComponentNameEnum 5bf30 128 0
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.decoder.avc
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.decoder.avc
11-14 10:12:29.772: INFO/QC_CORE(103): OMXCORE API - OMX_ComponentNameEnum 5bf30 128 1
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.decoder.mpeg4
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.decoder.mpeg4
11-14 10:12:29.772: INFO/QC_CORE(103): OMXCORE API - OMX_ComponentNameEnum 5bf30 128 2
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.decoder.h263
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.decoder.h263
11-14 10:12:29.772: INFO/QC_CORE(103): OMXCORE API - OMX_ComponentNameEnum 5bf30 128 3
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.encoder.mpeg4
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.encoder.mpeg4
11-14 10:12:29.772: INFO/QC_CORE(103): OMXCORE API - OMX_ComponentNameEnum 5bf30 128 4
11-14 10:12:29.772: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.encoder.h263
11-14 10:12:29.782: INFO/QC_CORE(103): GetRolesOfComponent OMX.qcom.video.encoder.h263
11-14 10:12:29.782: INFO/QC_CORE(103): OMXCORE API - OMX_ComponentNameEnum 5bf30 128 5
11-14 10:12:29.862: WARN/MediaPlayer(28909): info/warning (1, 44)
11-14 10:12:29.862: INFO/MediaPlayer(28909): Info (1,44)

我正在使用这样的媒体播放器:

private void playMedia(int     audioResource,
                       boolean vibrate)
   {
       Log.i("AV", "#### Attempting to play audio ####");

       if (this.lastAlert + VIBRATION_LENGTH <= System.currentTimeMillis())
       {
           this.lastAlert = System.currentTimeMillis();

           Log.i(this.toString(), "#### AV - Playing audio ####");

           try
           {    
              MediaPlayer mediaPlayer = new MediaPlayer();
              AssetFileDescriptor assetFileDescriptor 
                 = this.context.getResources().openRawResourceFd(audioResource);
              mediaPlayer.setOnCompletionListener(this);
              mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),
                                        assetFileDescriptor.getStartOffset(),
                                        assetFileDescriptor.getLength());
              mediaPlayer.prepare();
              mediaPlayer.start();
           }
           catch (Exception e)
           {
               Log.e(this.toString(), e.toString());
               e.printStackTrace();
           }

           if (vibrate)
           {
              if ( null != this.vibrator )
              {
                 this.vibrator.vibrate(VIBRATION_LENGTH);
              }
           }
       }
       else
       {
           Log.w(this.toString(), "##### AV - Audio is already playing #####");
       }
   }// end playMedia

   @Override
   public void onCompletion(MediaPlayer mediaPlayer)
   {
      mediaPlayer.reset();
      mediaPlayer.release();

      Log.i(this.toString(), "#### ################################### ####");
      Log.i(this.toString(), "#### AV - reset and release media player ####");

   }

音频文件为mp3格式。

【问题讨论】:

    标签: android media-player


    【解决方案1】:

    每次将 AssetFileDescriptor 设置为数据源时,都必须在其上调用 close。甚至 SDK 文档都说您可以在调用 setDataSource 后安全地释放文件描述符。

    【讨论】:

    • 感谢您的想法。在这一点上,这个问题是 OBE(通过事件克服)。我不确定这是否是问题所在。我最终根本没有使用文件描述符。此外,当时的媒体播放器不在实际的 Activity 中。现在是,我没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多