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;
}
}