Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用计时器或MediaPlayer方法?_Android_Timer_Media Player_Handler - Fatal编程技术网

Android 使用计时器或MediaPlayer方法?

Android 使用计时器或MediaPlayer方法?,android,timer,media-player,handler,Android,Timer,Media Player,Handler,我现在经常调用.getCurrentPosition来获取我的MediaPlayer的当前位置。当我运行动画时,这似乎会大大降低我的UI速度。我的问题是,与其一遍又一遍地调用该方法,不如使用计时器并显示它,然后单击停止/启动它 这是我目前的代码: 私有void startTimer(){ 线程升级线程=新线程(){ getTimeString(媒体[1].getCurrentPosition()) 以及: 受保护的最终处理程序mHandler=新处理程序(){ }) 您不需要一直调用getPos

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

这是我目前的代码:

私有void startTimer(){ 线程升级线程=新线程(){

getTimeString(媒体[1].getCurrentPosition())

以及:

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

})


您不需要一直调用getPosition来跟踪播放时间,只需启动计时器并根据计时器时间更新UI即可。您还可以向MediaPlayer添加一个OnInfo Listener()来跟踪播放结束并终止计时器

在计时器内使用runOnUiThread()更新UI,无需使用处理程序


我编写了这样一个每200毫秒启动一次的计时器,并毫无问题地更新了我的计数器UI。

您不需要一直调用getPosition来跟踪播放时间,只需启动计时器并根据计时器时间更新UI。您还可以在MediaPlayer上放置一个OnInfo Listener()来跟踪播放结束和终止计时器

在计时器内使用runOnUiThread()更新UI,无需使用处理程序


我编写了这样一个计时器,每200毫秒启动一次,并毫无问题地更新了我的计数器界面。

Thx发布问题,我今天早上向自己提问!Thx发布问题,我今天早上向自己提问!你认为这种方式会减慢我的动画吗?我不这么认为,计时器在自己的线程中运行,请不要这样做Ry大约500毫秒。你需要一个精细的谷物计数器吗?我不这么认为。在那里我有类似的应用程序,他们的计数器没有延迟地更新,动画也能流畅地运行。这就是我所困惑的。如果你需要这样的性能,你应该考虑把代码的那部分移到C++中的NDK,而不是java。他不需要T。o在NDK中进行编码。如果其他人遇到这种情况,我很明显他的问题是他只是在一段时间内拥有它()block不睡觉。他基本上可以在里面放任何东西,这会让UI结巴,因为它一直在以最快的速度运行。你认为这种方式会减慢我的动画吗?我不这么认为,计时器在它自己的线程中运行,试一下500毫秒左右。你需要细粒度计数器吗?我不这么认为。有sim卡ILAR应用程序在那里,我的计数器正在更新,没有延迟,动画也很流畅。这就是我所困惑的。如果你需要这样的性能,你应该考虑把代码的那部分移到C++中的NDK,而不是java。他不需要在NDK中编码它。对我来说,他的问题是他只是把它放在一个没有睡眠的while()块中。他基本上可以把任何东西放进去,这会使UI结巴,因为它一直在以最快的速度运行。
        @Override
        public void run() {

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

          Message msg = new Message(); 

          String timer1 =
          msg.obj = timer1;

          mHandler.sendMessage(msg); 

          }

        }


    };
    promoThread.start();
      }
  @Override public void handleMessage(Message msg) { 

      String text = (String)msg.obj;

      myText.setText(text);
}