/* Android Asynchronous Http Client Copyright (c) 2013 Jason Choy <jjwchoy@gmail.com> http://loopj.com Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package com.smartandroid.sa.loopj; import java.lang.ref.WeakReference; /** * A Handle to an AsyncRequest which can be used to cancel a running request. */ public class RequestHandle { private final WeakReference<AsyncHttpRequest> request; public RequestHandle(AsyncHttpRequest request) { this.request = new WeakReference<AsyncHttpRequest>(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; } }