当我尝试从AccountManager
获取身份验证令牌时,我需要调用
AccountManagerFuture<Bundle> getAuthToken(Account account, String authTokenType, Bundle options, Activity activity, AccountManagerCallback<Bundle> callback, Handler handler);
AccountManagerFuture<Bundle>
和AccountManagerCallback<Bundle>
之间有什么区别?我阅读了文档,但不清楚。
P.S。也许,这是诺比的问题,但我真的无法从谷歌文档中理解它。
答案 0 :(得分:1)
根据我的理解,AccountManagerCallback是一个可选的回调函,可以在通话结果准备就绪时通知您。
由于AccountManagerFuture<Bundle>
没有任何机制可以在结果准备就绪时通知您,因此您必须拨打getResult()或getResult(long, TimeUnit)来获取结果。由于这些调用是阻塞的,因此您需要首先生成一个新线程。文档明确声明您不能从主线程调用它们。当然,isDone()方法返回true
后,在主线程上使用它们应该是安全的。
回调只接收一个AccountManagerFuture<Bundle>
,它还包含结果(实际上可能与上面的对象相同),但已经完成加载。这是一种方便的方法,可以在结果准备就绪时收到通知,您可以安全地调用AccountManagerFuture.getResult()
而无需等待结果,也无需自己生成线程。