It comes very handy when you need to do CRUD operationa async without using a Loader, so by extending from asyncquery you get method such as startQuery, startInsert, startUpdate and startDelete an easy implementation could be:
public class CustomAsyncHandler extends AsyncQueryHandler {
private WeakReference<AsyncQueryListener> mListener;
public interface AsyncQueryListener {
void onQueryComplete(int token, Object cookie, Cursor cursor);
}
public CustomAsyncHandler(ContentResolver cr, AsyncQueryListener listener) {
super(cr);
mListener = new WeakReference<AsyncQueryListener>(listener);
}
public CustomAsyncHandler(ContentResolver cr) {
super(cr);
}
/**
* Assign the given {@link AsyncQueryListener} to receive query events from
* asynchronous calls. Will replace any existing listener.
*/
public void setQueryListener(AsyncQueryListener listener) {
mListener = new WeakReference<AsyncQueryListener>(listener);
}
/** {@inheritDoc} */
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
final AsyncQueryListener listener = mListener.get();
if (listener != null) {
listener.onQueryComplete(token, cookie, cursor);
} else if (cursor != null) {
cursor.close();
}
}
}
As you can see there is an extra interface AsyncQueryListener created to be as a callback when query is completed, as this you can create AsyncUpdateListener, AsyncDeleteListener, AsyncInsertListener, and so on.