FileDocCategorySizeDatePackage
ConnectionThread.javaAPI DocAndroid 5.1 API4506Thu Mar 12 22:22:10 GMT 2015android.net.http

ConnectionThread

public class ConnectionThread extends Thread
{@hide}

Fields Summary
static final int
WAIT_TIMEOUT
static final int
WAIT_TICK
long
mCurrentThreadTime
long
mTotalThreadTime
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_DEFAULT +
                android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);

        // these are used to get performance data. When it is not in the timing,
        // mCurrentThreadTime is 0. When it starts timing, mCurrentThreadTime is
        // first set to -1, it will be set to the current thread time when the
        // next request starts.
        mCurrentThreadTime = 0;
        mTotalThreadTime = 0;

        while (mRunning) {
            if (mCurrentThreadTime == -1) {
                mCurrentThreadTime = SystemClock.currentThreadTimeMillis();
            }

            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 {
                        mRequestFeeder.wait();
                    } catch (InterruptedException e) {
                    }
                    mWaiting = false;
                    if (mCurrentThreadTime != 0) {
                        mCurrentThreadTime = SystemClock
                                .currentThreadTimeMillis();
                    }
                }
            } else {
                if (HttpLog.LOGV) HttpLog.v("ConnectionThread: new request " +
                                            request.mHost + " " + request );

                mConnection = mConnectionManager.getConnection(mContext,
                        request.mHost);
                mConnection.processRequests(request);
                if (mConnection.getCanPersist()) {
                    if (!mConnectionManager.recycleConnection(mConnection)) {
                        mConnection.closeConnection();
                    }
                } else {
                    mConnection.closeConnection();
                }
                mConnection = null;

                if (mCurrentThreadTime > 0) {
                    long start = mCurrentThreadTime;
                    mCurrentThreadTime = SystemClock.currentThreadTimeMillis();
                    mTotalThreadTime += mCurrentThreadTime - start;
                }
            }

        }
    
public synchronized java.lang.StringtoString()

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