如果下一条指令需要很长时间,安卓"visibility"不会改变



我的片段有以下情况:

@SuppressLint("ClickableViewAccessibility")
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.streaming_fragment, container, false)
val button = view.findViewById<Button>(R.id.radio_button)
val pb = view.findViewById<ProgressBar>(R.id.progressBar)
button.setOnClickListener {
if (mediaPlayer.isPlaying) {
this.mediaPlayer.pause();
} else {
pb.visibility = View.VISIBLE
this.mediaPlayer.reset()
this.mediaPlayer.setDataSource(
requireContext(),
Uri.parse("https://xxx.mp3")
)
this.mediaPlayer.prepare()
this.mediaPlayer.start();
pb.visibility = View.INVISIBLE
}
this.renderButtonBackground()
}
return view;
}

但是指令pb.visibility = View.VISIBLE似乎不工作,因为视图刷新线程是"锁定"的;按照

this.mediaPlayer.reset()
this.mediaPlayer.setDataSource(
requireContext(),
Uri.parse("https://xxx.mp3")
)
this.mediaPlayer.prepare()
this.mediaPlayer.start();

事实上,如果我注释这行

pb.visibility = View.INVISIBLE

在MediaPlayer开始播放流媒体音频后出现转轮。

我怎样才能避免这种行为?有没有一种方法可以优先处理第一条指令?

谢谢…对不起,我是Android的新手。

您所展示的所有代码都在主(UI)线程上运行。文档明确指出MediaPlayer.prepare()可能会花费很长时间,并且永远不应该在主(UI)线程上调用。。文档甚至解释了如何使用MediaPlayer.prepareAsync()来做到这一点。

看到https://developer.android.com/guide/topics/media/mediaplayer?hl=en preparingasync

相关内容

  • 没有找到相关文章

最新更新