Шаблон токенов для Android

1

У меня есть проект Android, в котором я получаю токен от сервера для аутентификации и использую его для дальнейших запросов к серверу. Значок истекает примерно через 10 минут, поэтому я должен получить новый. Мой текущий шаблон выглядит так:

1- Выбирать токен, когда пользователь сначала запускает приложение

2- Блокируйте ввод пользователя с диалоговым окном "Подождите", чтобы он не пытался отправлять запросы с помощью нулевого токена из других видов активности

3- Сохранить токен и метку времени, остановить блокировку ввода пользователем

4- Регулярно onCreate() метку в onCreate() действий

5- При необходимости обновите.

Моя проблема в этом; если пользователь открывает действие, и токен истек, мое приложение снова блокирует ввод пользователя и пытается извлечь токен. Однако в фоновом режиме нормальная логика/поток приложения продолжается, и он пытается отправить запрос на сервер со старым или нулевым токеном.

Поэтому я хочу заблокировать эту задачу запроса -which - это AsyncTask как токен fetching-, и запустить его после завершения финализации. Как я могу использовать этот шаблон и является ли он правильным?

Сделать один поток ждать, пока другой закончит?

Теги:
multithreading
asynchronous
android-asynctask
token

1 ответ

1
Лучший ответ

Я бы подумал об использовании менеджера Android Account с помощью специального аутентификатора для обработки токенов. SampleSyncAdapter показывает вам, как это сделать. Используйте AccountManager getAuthToken для получения текущего токена. В аутентификаторе вы можете включить логику для недействительности токенов при тайм-ауте, что приведет к тому, что аутентификатор при следующем запросе на токен будет обращаться к серверу.

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

  1. Может быть, вы можете попытаться просто отменить текущий запрос и запустить новый после того, как вы извлекли новый токен?
  2. Для блокировки используйте примитивы синхронизации Java. Например, создайте объект "lock" и используйте его в async-задаче и обновите токен:

    protected Result doInBackground(Params... params) {
        //
        // the request and other stuff that does not require the token.
    
        synchronized(lock) {
            //
            // communicate with the server.
        }
    }
    
  • 0
    Можете ли вы предоставить хороший ресурс для изучения параллелизма Java, возможно, с большим количеством примеров. Я несколько раз читал официальное Учебное пособие по Java, но все еще не мог понять его.
  • 0
    Извините, это то, что я использую. Вероятно, есть несколько книг на эту тему, но я не знаю ни одной, чтобы рекомендовать вас. Вы также можете найти несколько хороших слайд-шоу на Slideshare ( slideshare.net/search/… ).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню