【问题标题】:Use a Timer or MediaPlayer method?使用 Timer 或 MediaPlayer 方法?
【发布时间】:2011-08-19 18:02:44
【问题描述】:

我目前经常调用 .getCurrentPosition 来获取我的 MediaPlayer 的当前位置。当我运行动画时,这似乎大大减慢了我的 UI。我的问题是,与其一遍又一遍地调用该方法……不如使用计时器并显示它,然后在点击时停止/启动它?

这是我当前的代码:

私人无效 startTimer() { 线程 promoThread = new Thread() {

        @Override
        public void run() {

          while(media[1].isPlaying()){

          Message msg = new Message(); 

          String timer1 =

getTimeString(media[1].getCurrentPosition());

          msg.obj = timer1;

          mHandler.sendMessage(msg); 

          }

        }


    };
    promoThread.start();
      }

和:

受保护的最终处理程序 mHandler = new Handler() {

  @Override public void handleMessage(Message msg) { 

      String text = (String)msg.obj;

      myText.setText(text);
}

};

【问题讨论】:

  • 感谢您发布这个问题,今天早上我问自己!

标签: android timer media-player handler


【解决方案1】:

您无需一直调用 getPosition 来跟踪播放时间,只需触发该计时器并根据计时器时间更新您的 UI。您还可以将 OnInfoListener() 放入 MediaPlayer 以跟踪播放结束和终止计时器。

在 Timer 中使用 runOnUiThread() 来更新 UI,不需要使用 Handler。

我编写了这样一个计时器,每 200 毫秒触发一次,并更新了我的计数器 UI,完全没有问题。

【讨论】:

  • 你认为这种方式会减慢我的动画速度吗?
  • 我不这么认为,Timer在自己的线程中运行,试试500mS左右吧。你需要一个细粮柜台吗?
  • 我不这么认为。那里有与我正在构建的应用程序类似的应用程序,它们的计数器会无延迟地更新,并且动画运行流畅。这让我很困惑。
  • 如果您需要这样的性能,您应该考虑将那部分代码移动到 C++ 中的 NDK,而不是 java。
  • 他不需要在NDK中编码。万一其他人遇到这种情况,对我来说,他的问题似乎很明显,他只是在 while() 块中没有睡眠。他基本上可以在其中放入任何东西,这会使 UI 卡顿,因为它不断地以尽可能快的速度运行。
猜你喜欢
  • 2015-07-07
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多