Custom AccountAuthenticator: получение токена авторизации

Когда я пытаюсь получить токен аутентификации от AccountManager Мне нужно позвонить

AccountManagerFuture<Bundle> getAuthToken(Account account, String authTokenType, Bundle options, Activity activity, AccountManagerCallback<Bundle> callback, Handler handler);

Какая разница между AccountManagerFuture<Bundle> а также AccountManagerCallback<Bundle>? Я читаю документы, но это не совсем понятно.

PS Возможно, это вопрос нуби, но я действительно не могу понять это из документов Google.

1 ответ

Решение

Насколько я понимаю, AccountManagerCallback является необязательным обратным вызовом, чтобы сообщить вам, когда будет готов результат этого вызова.

поскольку AccountManagerFuture<Bundle> нет никакого механизма, чтобы уведомить вас, когда результат будет готов, вам нужно было бы вызвать getResult() или getResult(long, TimeUnit), чтобы получить результат. Поскольку эти вызовы блокируются, вам нужно сначала создать новый поток. В документации прямо говорится, что вы не должны вызывать их из основного потока. Конечно, должно быть безопасно использовать их в основном потоке, как только метод isDone() вернет true,

Обратный звонок только что получил AccountManagerFuture<Bundle> он также содержит результат (который на самом деле может быть тем же объектом, что и выше), но уже завершил загрузку. Это удобный способ получить уведомление, когда результат будет готов, и вы можете безопасно позвонить AccountManagerFuture.getResult() без необходимости ждать результата и без необходимости создавать поток самостоятельно.

Другие вопросы по тегам