Android中VideoView的MediaController暂停视频时应用崩溃问题
VideoView点击MediaController暂停按钮崩溃问题排查与解决
问题现象
使用VideoView播放视频时,点击MediaController的暂停按钮触发空指针崩溃,错误信息如下:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
堆栈追踪指向DecorView.dispatchTouchEvent方法。
涉事代码
Uri uri = Uri.parse(videoUrl); chatVideoView.setVideoURI(uri); MediaController mediaController = new MediaController(getActivity()); mediaController.setAnchorView(chatVideoView); mediaController.setMediaPlayer(chatVideoView); chatVideoView.setMediaController(mediaController); chatVideoView.start();
原因分析
- 重复绑定冲突:VideoView调用
setMediaController()时会自动完成与MediaPlayer的绑定,手动调用mediaController.setMediaPlayer(chatVideoView)会导致重复绑定,引发内部引用混乱。 - 上下文失效:如果在Fragment中使用
getActivity(),当Fragment与Activity生命周期不同步时,MediaController可能持有已失效的Activity引用,触发触摸事件时调用null对象的方法。
解决方案
方案1:移除手动绑定MediaPlayer
删除多余的setMediaPlayer调用,让VideoView自动处理绑定逻辑:
Uri uri = Uri.parse(videoUrl); chatVideoView.setVideoURI(uri); MediaController mediaController = new MediaController(getActivity()); mediaController.setAnchorView(chatVideoView); // 移除该行:mediaController.setMediaPlayer(chatVideoView); chatVideoView.setMediaController(mediaController); chatVideoView.start();
方案2:生命周期内清理引用(Fragment场景)
在Fragment销毁视图时,主动清理VideoView的MediaController引用,避免上下文泄漏:
@Override public void onDestroyView() { super.onDestroyView(); if (chatVideoView != null) { chatVideoView.setMediaController(null); chatVideoView.stopPlayback(); } }
方案3:自定义MediaController捕获异常
通过自定义MediaController捕获空指针异常,避免崩溃:
public class SafeMediaController extends MediaController { public SafeMediaController(Context context) { super(context); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { try { return super.dispatchTouchEvent(ev); } catch (NullPointerException e) { return false; } } }
替换原MediaController:
MediaController mediaController = new SafeMediaController(getActivity());
验证方式
修改代码后重启应用,点击MediaController暂停按钮,确认崩溃消失且视频播放/暂停功能正常。
内容的提问来源于stack exchange,提问作者Faizan Ahmad
相关产品推荐
相关产品推荐

