FileDocCategorySizeDatePackage
ConnectionThread.javaAPI DocAndroid 1.5 API4439Wed May 06 22:41:56 BST 2009android.net.http

ConnectionThread

public class ConnectionThread extends Thread
{@hide}

Fields Summary
static final int
WAIT_TIMEOUT
static final int
WAIT_TICK
long
mStartThreadTime
long
mCurrentThreadTime
private boolean
mWaiting
private volatile boolean
mRunning
private android.content.Context
mContext
private RequestQueue.ConnectionManager
mConnectionManager
private RequestFeeder
mRequestFeeder
private int
mId
Connection
mConnection
Constructors Summary
ConnectionThread(android.content.Context context, int id, RequestQueue.ConnectionManager connectionManager, RequestFeeder requestFeeder)


     
                      
                      
                       
        super();
        mContext = context;
        setName("http" + id);
        mId = id;
        mConnectionManager = connectionManager;
        mRequestFeeder = requestFeeder;
    
Methods Summary
voidrequestStop()

        synchronized (mRequestFeeder) {
            mRunning = false;
            mRequestFeeder.notify();
        }
    
public voidrun()
Loop until app shutdown. Runs connections in priority order.

        android.os.Process.setThreadPriority(
                android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);

        mStartThreadTime = -1;
        mCurrentThreadTime = SystemClock.currentThreadTimeMillis();

        while (mRunning) {
            Request request;

            /* Get a request to process */
            request = mRequestFeeder.getRequest();

            /* wait for work */
            if (request == null) {
                synchronized(mRequestFeeder) {
                    if (HttpLog.LOGV) HttpLog.v("ConnectionThread: Waiting for work");
                    mWaiting = true;
                    try {
                        if (mStartThreadTime != -1) {
                            mCurrentThreadTime = SystemClock
                                    .currentThreadTimeMillis();
                        }
                        mRequestFeeder.wait();
                    } catch (InterruptedException e) {
                    }
                    mWaiting = false;
                }
            } else {
                if (HttpLog.LOGV) HttpLog.v("ConnectionThread: new request " +
                                            request.mHost + " " + request );

                HttpHost proxy = mConnectionManager.getProxyHost();

                HttpHost host;
                if (false) {
                    // Allow https proxy
                    host = proxy == null ? request.mHost : proxy;
                } else {
                    // Disallow https proxy -- tmob proxy server
                    // serves a request loop for https reqs
                    host = (proxy == null ||
                            request.mHost.getSchemeName().equals("https")) ?
                            request.mHost : proxy;
                }
                mConnection = mConnectionManager.getConnection(mContext, host);
                mConnection.processRequests(request);
                if (mConnection.getCanPersist()) {
                    if (!mConnectionManager.recycleConnection(host,
                                mConnection)) {
                        mConnection.closeConnection();
                    }
                } else {
                    mConnection.closeConnection();
                }
                mConnection = null;
            }

        }
    
public synchronized java.lang.StringtoString()

        String con = mConnection == null ? "" : mConnection.toString();
        String active = mWaiting ? "w" : "a";
        return "cid " + mId + " " + active + " "  + con;