package com.v7lin.style.app;
import android.content.Context;
import android.support.v4.content.AsyncTaskLoader;
/**
*
*
* @author v7lin E-mail:v7lin@qq.com
*/
public abstract class StyleTaskLoader<D> extends AsyncTaskLoader<D> {
private D mData;
public StyleTaskLoader(Context context) {
super(context);
}
protected void ensureInit() {
}
protected void ensureClear() {
}
@Override
public final void deliverResult(D data) {
D oldData = mData;
mData = data;
if (isStarted()) {
super.deliverResult(data);
}
onReleaseResources(oldData);
}
@Override
protected final void onStartLoading() {
super.onStartLoading();
ensureInit();
if (mData != null) {
deliverResult(mData);
}
if (takeContentChanged() || mData == null) {
forceLoad();
}
}
@Override
protected final void onStopLoading() {
super.onStopLoading();
cancelLoad();
}
@Override
public final void onCanceled(D data) {
super.onCanceled(data);
onReleaseResources(data);
}
@Override
protected final void onReset() {
super.onReset();
ensureClear();
// Ensure the loader is stopped
onStopLoading();
if (mData != null) {
onReleaseResources(mData);
mData = null;
}
}
protected void onReleaseResources(D data) {
}
}