在向服务器发出请求之前,我正在尝试从 Android 中的帐户获取身份验证令牌。我正在尝试使用 CountdownLatch 控制流程,以便它等到:
- a) 超时(10 秒)
b) 我们得到令牌
private CountDownLatch tokenLatch = new CountDownLatch(1); final long tokenTimeoutSeconds = 10; AccountManager manager = AccountManager.get(mContext); Account userAccount = getCurrentAccount(); // Get the auth token if (userAccount != null) { AccountManagerFuture<Bundle> future = manager.getAuthToken(userAccount, AccountUtility.AUTHTOKEN_TYPE_FULL_ACCESS, true, new AccountManagerCallback<Bundle>() { @Override public void run(AccountManagerFuture<Bundle> future) { try { Bundle bundle = future.getResult(); currentAuthToken = bundle.get(AccountManager.KEY_AUTHTOKEN).toString(); tokenLatch.countDown(); } catch (Exception e) { Log.e(LOG_TAG, "Problem getting auth token!", e); } } }, null); try { tokenLatch.await(tokenTimeoutSeconds, TimeUnit.SECONDS); } catch (InterruptedException e) { Log.e(LOG_TAG, "Interupted while getting auth token!", e); }
上下文被传递:
mContext = ... getApplicationContext();
现在它在这两种情况中的任何一种之前退出。但是,它总是在所有其他进程完成后到达 AccountManagerCallback。奇怪的。我肯定做错了什么。感谢您的帮助!