package info.guardianproject.securereaderinterface; import android.os.Handler; public abstract class ThreadedTask<Params,Progress,Result> { private Handler mHandler; private Thread mThread; public ThreadedTask() { mHandler = new Handler(); } protected abstract Result doInBackground(Params... values); protected void onPostExecute(Result result) { } public final ThreadedTask<Params, Progress, Result> execute (Params... params) { mThread = new Thread(new Runnable() { private Params[] mParams; public Runnable init(Params... params) { mParams = params; return this; } @Override public void run() { final Result r = doInBackground(mParams); if (mThread != null && !mThread.isInterrupted()) { mHandler.post(new Runnable() { @Override public void run() { onPostExecute(r); } }); } } }.init(params)); mThread.start(); return this; } public void cancel(boolean mayInterruptIfRunning) { // TODO: heed the mayInterruptIfRunning param. if (mThread != null) mThread.interrupt(); mThread = null; } }