При отмене асинхронной задачи, хотя она отменяется. Ваш asyncTask будет работать до тех пор, пока doInBackGround () не завершит свою работу.
Так что для вашего GetOriginalVideosAsync
сделайте это в doInBackground
:
@Override
protected ArrayList<Video> doInBackground(File[]... arg) {
files = arg[0];
for (File file : files) {
//add this
if(isCancelled){
return null;
}
if (!file.isDirectory() && isVideoFile(file.getPath())) {
videoList.add(new Video(file.getName(), file, new Date(file.lastModified())));
}
}
return videoList;
}
И для вашего GetCompressedVideosAsync
сделайте это в doInBackground
:
@Override
protected ArrayList<Video> doInBackground(File[]... arg) {
files = arg[0];
for (File file : files) {
//add this
if(isCancelled){
return null;
}
if (!file.isDirectory() && isVideoFile(file.getPath())) {
videoListCompressed.add(new Video(file.getName(), file, new Date(file.lastModified())));
}
}
return videoListCompressed;
}
обновление
Попробуйте выполнить обе задачи в одном и том же месте, о котором я вам говорил:
if(isCancelled){
break;
}
обновление 2
Посмотрите, как ваши asyncTaks должны быть переменными-членами операции
class MyActivity extends ........{
private GetOriginalVideosAsync orginalTask;
private GetCompressedVideosAsync compressedTask;
.......
}
Вызвать паузу следующим образом:
@Override
protected void onPause() {
orginalTask.cancel(true);
compressedTask.cancel(true);
super.onPause();
}
и
private void getLoadOriginalVideos() {
if (videoList.isEmpty()) {
File directory = new File(Environment.getExternalStorageDirectory() + File.separator + APPDIR);
ArrayList<File> filesList = new ArrayList<File>();
if (directory.isDirectory() && directory.exists()) {
filesList.addAll(Arrays.asList(getOriginalVideos(directory.listFiles())));
}
orginalTask = new GetOriginalVideosAsync();
orginalTask.execute(filesList.toArray(new File[filesList.size()]));
}
}