bin / mupdf / mupdf-1.7 / platform / android / src / com / artifex / mupdfdemo / CancellableAsyncTask.java
7859 viewspackage com.artifex.mupdfdemo;12import java.util.concurrent.CancellationException;3import java.util.concurrent.ExecutionException;45// Ideally this would be a subclass of AsyncTask, however the cancel() method is final, and cannot6// be overridden. I felt that having two different, but similar cancel methods was a bad idea.7public class CancellableAsyncTask<Params, Result>8{9private final AsyncTask<Params, Void, Result> asyncTask;10private final CancellableTaskDefinition<Params, Result> ourTask;1112public void onPreExecute()13{1415}1617public void onPostExecute(Result result)18{1920}2122public CancellableAsyncTask(final CancellableTaskDefinition<Params, Result> task)23{24if (task == null)25throw new IllegalArgumentException();2627this.ourTask = task;28asyncTask = new AsyncTask<Params, Void, Result>()29{30@Override31protected Result doInBackground(Params... params)32{33return task.doInBackground(params);34}3536@Override37protected void onPreExecute()38{39CancellableAsyncTask.this.onPreExecute();40}4142@Override43protected void onPostExecute(Result result)44{45CancellableAsyncTask.this.onPostExecute(result);46task.doCleanup();47}48};49}5051public void cancelAndWait()52{53this.asyncTask.cancel(true);54ourTask.doCancel();5556try57{58this.asyncTask.get();59}60catch (InterruptedException e)61{62}63catch (ExecutionException e)64{65}66catch (CancellationException e)67{68}6970ourTask.doCleanup();71}7273public void execute(Params ... params)74{75asyncTask.execute(params);76}7778}798081