您的位置:首页 > 理论基础 > 计算机网络

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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐