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