Android "visibility" 如果下一条指令需要很长时间则不会改变

Android "visibility" doesn't change if next instruction take long time

我的片段中有以下情况。

 @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