最近工作用遇到了需要根据当前所在fragment生命周期去控制全屏显示VideoView播放问题,但是由于MediaPlayer是基于状态机实现的,有一些操作,例如reset(),release()等等都是同步实现,所以频繁操作会引起ANR,解决方案就是将所用针对mediaPlayer的操作放到单独现场handler中去同一处理,达到同步处理的目的。
修改前代码如下:
@Override public void onResume() { super.onResume(); isPause = false; if (canResume() && needResume && mVideoView != null) { sendStartVideoMsg(); try { mVideoView.setVideoURI(Uri.parse("file://" + info.accUrl)); mVideoView.start(); needResume = false; } catch (Exception e) { } } } boolean isPause = false; @Override public void onPause() { super.onPause(); isPause = true; if (mImageView != null && mImageView.getVisibility() != View.VISIBLE) { mImageView.setVisibility(View.VISIBLE); } if (canResume() && mVideoView != null) { if (mVideoView.