Android VideoView加载网络视频过程中退出页面,出现程序无响应 希望来大神指点一二

最近在做视频播放,测试的时候出现频繁循环(点击播放列表,进入播放页面,返回列表页),出现程序卡死问题。播放页面加载慢的时候按返回键没反应,再按就会出现无响应问题。也不报错。
代码如下:
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);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值