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
我的片段中有以下情况。
@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