You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android应用返回主页面后VideoView显示黑屏问题求助

解决VideoView返回主页面黑屏的问题

这问题我之前做项目时也碰到过,核心原因是你没处理好Activity的生命周期回调!你现在只在onCreate()里初始化并启动VideoView,但当你跳转到其他页面再返回时,MainActivity会触发onResume()而不是重新执行onCreate(),这时候VideoView的播放状态已经丢失,自然就显示黑屏了。

解决方案:把播放逻辑移到生命周期的合适回调里

我们需要把VideoView的初始化和播放逻辑拆分,一次性的初始化放在onCreate(),而每次回到前台的播放启动放在onResume(),同时在离开页面时暂停资源,避免内存泄漏和后台播放。

修改后的完整代码如下:

public class MainActivity extends Activity {
    private VideoView videoView;
    private Uri videoUri;
    private int currentPlayPosition = 0; // 用于保存播放进度

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 只做一次性初始化:绑定控件、设置视频Uri、配置循环播放
        videoView = (VideoView) findViewById(R.id.videoid);
        videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.arkaplan);
        videoView.setVideoURI(videoUri);
        
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.setLooping(true); // 设置循环播放
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        // 回到主页面时,恢复播放进度并启动视频
        videoView.seekTo(currentPlayPosition);
        videoView.requestFocus();
        videoView.start();
    }

    @Override
    protected void onPause() {
        super.onPause();
        // 离开页面时,保存当前播放位置并暂停视频
        currentPlayPosition = videoView.getCurrentPosition();
        videoView.pause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 页面销毁时释放资源,避免内存泄漏
        videoView.stopPlayback();
    }
}

关键改动说明:

  • onCreate():只做控件绑定、Uri设置和循环播放的配置,这些都是一次性操作,不需要重复执行。
  • onResume():每次Activity回到前台时都会调用,这里恢复之前保存的播放进度,然后启动视频,保证返回页面时视频能正常播放。
  • onPause():离开页面时保存当前播放位置并暂停视频,既避免后台继续播放浪费资源,也让下次返回时能从断点继续。
  • onDestroy():页面销毁时调用stopPlayback()彻底释放VideoView的资源,防止内存泄漏。

这样修改后,你跳转到其他页面再返回主页面时,VideoView就会正常恢复播放,不会再出现黑屏的问题啦!

内容的提问来源于stack exchange,提问作者Superpace

火山引擎 最新活动