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




