0
나는 아주 기본적인 질문이있다. 아래 코드에서 이미 초기화 된 URL 애셋이있는 VideoView를 아래의 AsyncTask에 전달하는 것이 목적입니다. 작업은 비디오를 시작하고 진행 상황을 추적합니다. 지금까지 progressPercentage를 올바르게 인쇄하고 100 %에 도달하면 루프에서 빠져 나옵니다. 그러나 재생 중에 "뒤로"를 누르거나 VideoView를 호스팅하는 Activity를 종료하면이 AsyncTask가 무한히 실행됩니다. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까? 나는 "현재"값을 "prev_current"값과 비교할 것을 고려했다. 그러나 사용자가 FF 나 RW를 비디오의 특정 지점으로 결정하면이 작업을 종료하지 않을 것이다.AsyncTask가 특정 코드를 실행하는 것을 막는 방법 무한히
public class VideoPlayerProgressAsyncTask extends AsyncTask<Void, Integer, Void>{
private VideoView video;
private int duration = 0; // in milliseconds
private int current = 0; // in milliseconds
private int progressPercentage = 0; // range [0..100]
public VideoPlayerProgressAsyncTask(VideoView vid) {
video = vid;
}
@Override
protected Void doInBackground(Void... params) {
video.start();
video.requestFocus();
video.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp) {
duration = video.getDuration();
}
});
while(progressPercentage <= 100) {
current = video.getCurrentPosition(); // in milliseconds
try{
int temp = (int) (current * 100/duration);
publishProgress(temp);
if(progressPercentage >= 100)
break;
}
catch(Exception e){ }
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progressPercentage = values[0];
}
}
멈출 것이다. 이 : @Override 같은 코드를 정의해야합니다 \t 공공 무효 onPause() { \t \t \t super.onPause을() 스텁 \t // TODO 자동 생성 방법; \t \t asynctask.cancel (true); \t} –