Android VideoView加载网络视频过程中退出页面,出现程序无响应 希望来大神指点一二
2017-01-02 16:01
1241 查看
最近在做视频播放,测试的时候出现频繁循环(点击播放列表,进入播放页面,返回列表页),出现程序卡死问题。播放页面加载慢的时候按返回键没反应,再按就会出现无响应问题。也不报错。
代码如下:
代码如下:
package com.ccphl.box.activity; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; import android.os.AsyncTask; import android.os.Bundle; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; import android.widget.MediaController; import android.widget.TextView; import android.widget.Toast; import android.widget.VideoView; import com.ccphl.android.tv.wmfw.R; import com.ccphl.box.base.Constant; import com.ccphl.box.pojo.ProgramInfo; import com.ccphl.box.task.MyAsyncTask; import com.ccphl.box.util.FileUtil; import com.ccphl.box.util.T; import com.ccphl.box.util.YuanJiaoUtil; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; /** * 播放界面 * 处理通过playUrl播放的视频,点播使用 * @author SYF * @creationtime 2014-8-4下午1:21:16 */ public class VideoActivity extends BaseActivity { private TextView programNameTextView; private VideoView videoView; private MediaController mediaController; private ProgramInfo programInfo; private String playUrlsss; private PlayTask task; private boolean isMediaCenter = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); init(); } private void init(){ progressDialogShow(); videoView = (VideoView) findViewById(R.id.video_videoview); programNameTextView = (TextView) findViewById(R.id.video_program_name); mediaController = new MediaController(this, false); mediaController.setMediaPlayer(videoView); videoView.setMediaController(mediaController); videoView.setOnErrorListener(new MyOnErrorListener()); videoView.setOnCompletionListener(new MyOnCompletionListener()); videoView.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer arg0) { T.showShort(context, "onPrepared"); videoView.start(); } }); String programName = getIntent().getStringExtra("movieName"); programInfo = (ProgramInfo) getIntent().getSerializableExtra("programInfo"); isMediaCenter = (Boolean)getIntent().getBooleanExtra("isMediaCenter", false); programNameTextView.setText(programName); playUrlsss = programInfo.getPlayUrl(); play(); } private void play(){ if(isMediaCenter){ videoView.setVideoPath(playUrlsss); videoView.seekTo(currentPosition); }else if(playUrlsss!=null && playUrlsss.length()>0){ task = new PlayTask(playUrlsss); task.execute(); }else{ Toast.makeText(this, "无法播放视频!", Toast.LENGTH_SHORT).show(); finish(); } } /** * 播放 * 播放需要通过“播放请求地址”获取真正的“播放地址” */ private class PlayTask extends AsyncTask<Void, Integer, Void>{ private String playUrl; public PlayTask(String playUrl) { super(); this.playUrl = playUrl; } @Override public void onPreExecute() { progressDialogShow("正在加载视频……"); if(videoView.isPlaying()){ videoView.stopPlayback(); } } @Override protected Void doInBackground(Void... arg0) { playUrl = YuanJiaoUtil.getYjRealPlayUrl(playUrl); return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); progressDialogDismiss(); T.showShort(context, "url="+playUrl); if(playUrl=="" || playUrl.toString().length()<5){ Toast.makeText(getApplicationContext(), "无法获取播放地址", Toast.LENGTH_SHORT).show(); finish(); }else{ if(playUrl.equals(Constant.TEMP_VIDEO_TEMP)){ Toast.makeText(getApplicationContext(), "该视频暂时无法播放!", Toast.LENGTH_LONG).show(); } videoView.setVideoPath(playUrl.toString()); videoView.seekTo(currentPosition); } } } /** * */ private class MyOnErrorListener implements OnErrorListener { @Override public boolean onError(MediaPlayer mp, int what, int extra) { T.showShort(context, "error"); finish(); return true; //如果处理了错误返回true,否则返回false } }; /** * 视频播放完 */ private class MyOnCompletionListener implements OnCompletionListener{ @Override public void onCompletion(MediaPlayer mp) { T.showShort(context, "compelete"); finish(); } } @Override public void onPause() { try{ if(videoView.isPlaying()){ videoView.pause(); } videoView.stopPlayback(); if(task != null && !task.isCancelled()){ task.cancel(true); } }catch(Exception e){ e.printStackTrace(); } super.onPause(); } @Override protected void onStop() { task = null; videoView = null; super.onStop(); } @Override public void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } /** * 遥控器按钮事件 */ @Override public boolean dispatchKeyEvent(KeyEvent event) { return super.dispatchKeyEvent(event); } }
相关文章推荐
- Android VideoView加载网络视频过程中退出页面,出现程序无响应 希望来大神指点一二
- 自定义webview中调用app版的地图页面,当我多次点击坐标的时候出现闪退找不到原因,下面是代码求大神指点~~~谢谢~~!!!
- webview 加载h5页面video全屏后退出滚动状态被修改的问题
- webView--Android中webView加载H5时,H5页面在不同的手机可能出现文字或者图标类似换行的现象
- Android使用VideoView播放网络视频
- Android中WebView加载页面出现白屏解决方案
- WebView加载详情页面时Android4.4.4系统手机下拉时文字出现半屏问题
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络 视频,androidvideoview
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- Android使用VideoView播放网络、rtsp码流视频
- Android webview 加载html5 Video的视频,有时候出不来,该怎么办呢?
- Android中利用VideoView播放网络上视频的基础用法
- Android原生webView加载h5页面出现加载错乱不完全问题
- Android使用VideoView播放网络视频,获取网络视频缩略图
- Android使用VideoView播放网络视频
- WebView打开网页,设置支持Javascript,浏览的网页后退而不是退出浏览器,判断页面加载过程,缓存的使用
- Android VideoView播放网络视频简介
- Android 视频播放器 VideoView 的使用,播放本地视频 和 网络视频
- 安卓视频播放API--VideoView如何加载项目视频资源,如何全屏播放,如何作为欢迎页面的背景显示?
- Android使用VideoView出现无法播放此视频问题的解决方法