gpt4 book ai didi

android - VideoView 在不可见时不启动

转载 作者:可可西里 更新时间:2023-11-01 19:06:33 25 4
gpt4 key购买 nike

我有一个 AsyncTask,我在其中隐藏视频 View ,开始播放视频,并在播放视频时显示视频 View 。

但是当视频 View 设置为不可见时,视频不会开始,异步任务一直卡在 onBackground 中。如果我注释掉这一行,视频就会开始播放。为什么视频观看需要可见表面?

public void walk(final View v) {

new AsyncTask() {
@Override
protected void onPreExecute() {
super.onPreExecute();
mVideoView.setVisibility(View.INVISIBLE); // this line causes video not to start
mVideoView.start();
}

@Override
protected Object doInBackground(Object... objects) {
while (!mVideoView.isPlaying()) {}
return null;
}

@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
mVideoView.setVisibility(View.VISIBLE);
}

}.execute();

我这样做的一些背景知识:我尽量避免开始播放视频时通常会遇到的众所周知的黑色闪光问题:

https://stackoverflow.com/search?q=%5Bandroid%5D+videoview+black

https://stackoverflow.com/search?q=%5Bandroid%5D+video+%5Bmediaplayer%5D+black

最佳答案

VideoView 确实是一个专门的 SurfaceView . SurfaceView 的工作原理是在普通窗口(包含所有 View )后面创建另一个窗口,然后有一个透明区域,以便可以在它后面看到新窗口(具有自己的绘图表面)。

如果 SurfaceView 不再可见,它的表面将被销毁,即 SurfaceHolder.Callback.surfaceDestroyed 被调用。如果没有有效表面,VideoView 将不会尝试播放其视频,因此您的 AsyncTask 将永远不会离开 doInBackground

The Surface will be created for you while the SurfaceView's window is visible; you should implement surfaceCreated(SurfaceHolder) and surfaceDestroyed(SurfaceHolder) to discover when the Surface is created and destroyed as the window is shown and hidden.

关于android - VideoView 在不可见时不启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291430/

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