读书人

超火候制

发布时间: 2012-09-19 13:43:54 作者: rapoo

超时机制

??? static final int OP_PENDING = 0;
??? static final int OP_ACKNOWLEDGED = 1;
??? static final int OP_TIMEOUT = -1;

?

?final Object mCurrentOpLock = new Object();

?

?

?

//代码调用就开始等待 在while中等待,直到 超时或者代码执行已经返回。

?boolean waitUntilOperationComplete(int token) {
??????? int finalState = OP_PENDING;
??????? synchronized (mCurrentOpLock) {
??????????? try {
??????????????? while ((finalState = mCurrentOperations.get(token, OP_TIMEOUT)) == OP_PENDING) {
??????????????????? try {
??????????????????????? mCurrentOpLock.wait();
??????????????????? } catch (InterruptedException e) {}
??????????????? }
??????????? } catch (IndexOutOfBoundsException e) {
??????????????? // the operation has been mysteriously cleared from our
??????????????? // bookkeeping -- consider this a success and ignore it.
??????????? }
??????? }
??????? mBackupHandler.removeMessages(MSG_TIMEOUT);
??????? if (DEBUG) Slog.v(TAG, "operation " + Integer.toHexString(token)
??????????????? + " complete: finalState=" + finalState);
??????? return finalState == OP_ACKNOWLEDGED;
??? }

?

?

?

public void opComplete(int token) {
??????? synchronized (mCurrentOpLock) {
??????????? if (DEBUG) Slog.v(TAG, "opComplete: " + Integer.toHexString(token));
??????????? mCurrentOperations.put(token, OP_ACKNOWLEDGED);
??????????? mCurrentOpLock.notifyAll();
??????? }
??? }

?

?

private class BackupHandler extends Handler {
??????? public BackupHandler(Looper looper) {
??????????? super(looper);
??????? }

?

????? case MSG_TIMEOUT:
??????????? {
??????????????? synchronized (mCurrentOpLock) {
??????????????????? final int token = msg.arg1;
??????????????????? int state = mCurrentOperations.get(token, OP_TIMEOUT);
??????????????????? if (state == OP_PENDING) {
??????????????????????? if (DEBUG) Slog.v(TAG, "TIMEOUT: token=" + token);
??????????????????????? mCurrentOperations.put(token, OP_TIMEOUT);
??????????????????? }
??????????????????? mCurrentOpLock.notifyAll();
??????????????? }
??????????????? break;
??????????? }
}

?

?

?

?

?

?

读书人网 >移动开发

热点推荐