gpt4 book ai didi

java - 播放期间SeekBar有点生涩

转载 作者:行者123 更新时间:2023-12-03 02:33:14 27 4
gpt4 key购买 nike

基本上,我使用搜索栏向用户显示音频播放的过程,我的视觉更新显示在Thread中,如下所示:

@Override
public void run() {
while(mUpdating) {
if(mSeekBar != null) {
mSeekBar.setProgress(mAudioPlaybackManager.getCurrentPosition());
}
//Other stuff is updating
}
}

因此,例如,如果用户播放的音频长度为2500毫秒,则此 SeekBar最大值将为2500,并且将每毫秒更新一次

相同的代码在 runOnUiThread中的工作要慢得多,所以我猜测进度更改时,像 postInvalidate这样的东西被称为

因此,基本上每毫秒,seekbar值应更改一次。我想这就是这里的问题。在我的设备 Samsung J7上,它工作正常,但是在 Samsung Galaxy S5上,它一直都在停止和跳跃,就像我将这段代码放在 runOnUIThread中一样,这真的很慢。

我该怎么做才能使其更流畅?我是否可以为此目的使用另一个 View

当前 SeekBar正在做的事情:
  • 基本上在while(updating)中显示音频的进度
  • 当用户更改SeekBar的位置时,音频即从该点开始。
  • 最佳答案

    该线程是工作线程,而不是UI线程,您正在操纵线程内的UI组件,从而阻塞了UI线程。

    如果要更新搜索栏,请在UI线程中对其进行更新。可以使用UI的线程处理程序来完成。

    例如

    private Runnable updateSeekBarTime = new Runnable() {
    public void run() {
    //get current position
    timeElapsed = mediaPlayer.getCurrentPosition();
    //set seekbar progress
    seekbar.setProgress((int) timeElapsed);

    //repeat yourself again in 100 miliseconds
    durationHandler.postDelayed(this, 100);
    }
    };

    在执行
    public void play(View view) {

    mediaPlayer.start();

    while(mUpdating) {
    if(mSeekBar != null) {
    // post the Runnable (updateSeekBarTime)
    durationHandler.postDelayed(updateSeekBarTime, 100);
    }
    }
    }

    从用户的 Angular 来看,更新组件也不能简单地每毫秒完成一次,因此不会引起一点暂停。

    关于java - 播放期间SeekBar有点生涩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39452111/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com