package com.loopj.android.http; import java.lang.ref.WeakReference; /** * A Handle to an AsyncRequest which can be used to cancel a running request. */ class RequestHandle { private final WeakReference<AsyncHttpRequest> request; public RequestHandle(AsyncHttpRequest request) { this.request = new WeakReference(request); } /** * Attempts to cancel this request. This attempt will fail if the request has already completed, * has already been cancelled, or could not be cancelled for some other reason. If successful, * and this request has not started when cancel is called, this request should never run. If the * request has already started, then the mayInterruptIfRunning parameter determines whether the * thread executing this request should be interrupted in an attempt to stop the request. * <p> </p> After this method returns, subsequent calls to isDone() will always return * true. Subsequent calls to isCancelled() will always return true if this method returned * true. * * @param mayInterruptIfRunning true if the thread executing this request should be interrupted; * otherwise, in-progress requests are allowed to complete * @return false if the request could not be cancelled, typically because it has already * completed normally; true otherwise */ public boolean cancel(boolean mayInterruptIfRunning) { AsyncHttpRequest _request = request.get(); return _request == null || _request.cancel(mayInterruptIfRunning); } /** * Returns true if this task completed. Completion may be due to normal termination, an * exception, or cancellation -- in all of these cases, this method will return true. * * @return true if this task completed */ public boolean isFinished() { AsyncHttpRequest _request = request.get(); return _request == null || _request.isDone(); } /** * Returns true if this task was cancelled before it completed normally. * * @return true if this task was cancelled before it completed */ public boolean isCancelled() { AsyncHttpRequest _request = request.get(); return _request == null || _request.isCancelled(); } public boolean shouldBeGarbageCollected() { boolean should = isCancelled() || isFinished(); if (should) request.clear(); return should; } }