gpt4 book ai didi

java - 带有媒体播放器的异步任务不会触发 PublishProgress

转载 作者:行者123 更新时间:2023-12-01 15:15:41 25 4
gpt4 key购买 nike

我写了一个AsyncTask:

public class AudioTransition extends AsyncTask <Void, Void, MediaPlayer>
{
private int goalID;
private int milliseconds;
private MediaPlayer tempPlayer;

AudioTransition(int ID, int Milliseconds)
{
goalID = ID;
milliseconds = (int)(((float)Milliseconds)/100);
}

@Override
protected void onPreExecute()
{
tempPlayer = MediaPlayer.create(context, goalID);
tempPlayer.setVolume(0, 0);
tempPlayer.setLooping(true);
tempPlayer.start();
}

@Override
protected MediaPlayer doInBackground(Void... arg0) {

for (int i = 0; i < 100; i++)
{
value = i;

publishProgress();
try {
Thread.sleep(milliseconds);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (!player.isPlaying())
tempPlayer.pause();
}

return tempPlayer;
}

@Override
protected void onProgressUpdate(Void... v) {
super.onProgressUpdate(v);
player.setVolume(100-value, 100-value);
tempPlayer.setVolume(value, value);
}


@Override
protected void onPostExecute( MediaPlayer result ) {
super.onPostExecute(result);
player.reset();
player = tempPlayer;
player.setVolume(100,100);
transitioning = false;
}
}

但是音量并没有消失。它只是启动两条轨道,然后停止。在 doInBackground 完成之前,MediaPlayers 不会更新。 如何使 MediaPlayers 在这种类型的后台工作人员中得到更新? 看起来publishProgress() 应该可以工作。

最佳答案

天哪。不要在 AsyncTask 中 hibernate 线程!您完全滥用了 AsyncTask。你想不出另一种方法来完成计时器类型的事情,所以你捕获了 AsyncTask 的publishprogress的想法(它甚至不像我认为你认为的那样工作),尽管 AsyncTask 应该用于一个一件事,只有一件事:在主(UI)线程上做繁重的工作。

如果您只是想淡出音量,请使用如下所示的内容:(这位于任何方法之外的某个位置)。

 private Runnable VolumeFadeRunnable = new Runnable() {
@Override
public void run() {
volume--;
player.setVolume(volume, volume);
if(volume>0)
handler.postDelayed(this, 1000);
else
handler.removeCallbacks(this);
}
};

只需将处理程序初始化为 onCreate 或其他内部的字段,并确保该处理程序和计数器变量在该可运行对象内部可见。

关于java - 带有媒体播放器的异步任务不会触发 PublishProgress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11638786/

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