Я видел AccountManager в Android SDK и что он используется для хранения информации об учетной записи. Таким образом, я не могу найти общего обсуждения того, для чего он предназначен. Кто-нибудь знает о каких-либо полезных дискуссиях о том, каково намерение AccountManager и что он вам покупает? Есть мнения о том, для какого типа аккаунтов это подходит? Будете ли вы размещать информацию об учетной записи вашего пользователя для общего веб-сервиса?
Для чего мне использовать Android AccountManager?
Ответы (3)
Этот вопрос немного устарел, но я думаю, что он все еще представляет большой интерес.
AccountManager
, SyncAdapter
и ContentProvider
идут вместе.
- У вас не может быть
SyncAdapter
безAccount
вAccountManager
. - У вас не может быть
SyncAdapter
безContentProvider
.
Но вы можете:
- используйте
ContentProvider
без других. - используйте
AccountManager
без других (но вы не можете использоватьAccountManager
безSyncAdapter
< /a> до Android 2.2/Froyo API 8)
С AccountManager
/ SyncAdapter
/ ContentProvider
:
AccountManager
предоставляет пользователям центральную точку (Настройки > Учетные записи) для определения их учетных данных.- Android решает, когда можно выполнить синхронизацию через
SyncAdapter
. Это может быть полезно для оптимизации батареи (например, синхронизация не выполняется, когда сеть не работает). ContentProvider
— это удобный способ обмена данными между приложениями. Примечание. Существуют другие методы межпроцессное взаимодействие на Android.ContentProvider
планирует доступ к базе данных в фоновом потокеAsyncQueryHanlder
< /a> помогает запрашиватьContentProvider
в фоновом потоке, предотвращая ошибки Application Not Responsive (ANR) и не требуя от вас явно обрабатывать потоки.ContentProvider
связан с наблюдателемContentResolver
: это означает, что можно легко уведомлять представления об изменении контента.
Итог: фреймворк AccountManager
/SyncAdapter
/ContentProvider
помогает, если вы хотите синхронизировать данные с веб-ресурса. Требуются поддельные/тупые реализации на API 7. Также
- Если вы хотите хранить только данные, вам следует рассмотреть более простой механизм хранения данных.
- Если вам нужно получить только один ресурс, вы можете использовать
AsyncTaskLoader
. - Если вы хотите загружать изображения асинхронно, вы можете использовать специализированные библиотеки, такие как Square Picasso.
- Если вы хотите выполнить только какой-то код в данный момент времени, вы можете рассмотреть Service/Alarm
- доступно только из API >= 7 (это уже не имеет значения)
Наконец, если вы используете SyncAdapter
, серьезно рассмотрите возможность Firebase Cloud Messaging (ранее Google Cloud Messaging ), также известные как «push-уведомления», чтобы получать более свежие обновления и оптимизировать использование батареи.
Класс AccountManager интегрирован с вашими телефонными учетными записями. Итак, если вы будете следовать всем инструкциям и правильно работать, вы увидите свои учетные записи в меню «Настройки-> учетные записи и синхронизация». Оттуда вы можете настроить их или даже удалить. Кроме того, accountManager имеет кеш билетов аутентификации для ваших учетных записей. Это можно использовать и в том случае, если вы не планируете синхронизировать свой аккаунт (насколько мне известно).
Если вы не хотите, чтобы ваши учетные записи отображались в этом меню, вам не следует использовать AccountManager и хранить данные учетных записей в другом месте (возможно, в общих настройках) http://developer.android.com/guide/топики/данные/data-storage.html
Из http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/:
Первая часть головоломки называется Аутентификатор учетной записи, который определяет, как учетная запись пользователя будет отображаться в настройках «Учетные записи и синхронизация». Для реализации средства проверки подлинности учетной записи требуется 3 компонента: служба, возвращающая подкласс AbstractAccountAuthenticator из метода onBind, действие, предлагающее пользователю ввести свои учетные данные, и XML-файл, описывающий, как ваша учетная запись должна выглядеть при отображении пользователю. Вам также необходимо добавить разрешение android.permission.AUTHENTICATE_ACCOUNTS в файл AndroidManifest.xml.