package com.frozendevs.periodictable.content; import android.content.Context; public abstract class AsyncTaskLoader<Result> extends android.support.v4.content.AsyncTaskLoader<Result> { private Result mResult; public AsyncTaskLoader(Context context) { super(context); } @Override public void deliverResult(Result result) { if (isReset() && mResult != null) { releaseResources(result); return; } Result oldResult = mResult; mResult = result; if (isStarted()) { super.deliverResult(result); } if (oldResult != null && oldResult != result) { releaseResources(oldResult); } } @Override protected void onStartLoading() { if (mResult != null) { deliverResult(mResult); } if (takeContentChanged() || mResult == null) { forceLoad(); } } @Override protected void onStopLoading() { cancelLoad(); } @Override protected void onReset() { onStopLoading(); if (mResult != null) { releaseResources(mResult); mResult = null; } } @Override public void onCanceled(Result result) { super.onCanceled(result); releaseResources(result); } public void releaseResources(Result result) { } }