What should I use Android AccountManager for?

This question is a bit old, but I think it is still of good interest.

AccountManager, SyncAdapter and ContentProvidergo together.

But you can:

With AccountManager / SyncAdapter / ContentProvider:

  • AccountManager gives users a central point (Settings > Accounts) to define their credentials
  • Android decides when synchronization can be done via SyncAdapter. This can be good to optimize battery (no sync is done when network is down, for instance)
  • ContentProvider is a convenient way to share data across applications
    Note: there are other methods of inter-process communication on Android.
  • ContentProvider schedules the database access in a background thread The AsyncQueryHanlder helps to query the ContentProvider in a background thread, preventing Application Not Responsive (ANR) errors while not requiring you to explicitly handle threading.
  • ContentProvider ties into ContentResolver‘s observer: this means it is easy to notify views when content is changed

Bottom line: the framework AccountManager / SyncAdapter / ContentProvider helps if you want to synchronize data from a web resource. Fake/Dumb implementations are required on API 7. Also

  • If you only want to store data, you should consider a simpler mechanism for data storage
  • If you only need to fetch an only resource, you can use an AsyncTaskLoader
  • If you want to load images asynchronously, you can use specialized libraries like Square Picasso
  • If you only want to execute some code at a given time, you can consider a Service / Alarm
  • only available from API >= 7 (this doesn’t matter anymore)

Finally, if you use a SyncAdapter, seriously consider Firebase Cloud Messaging (previously Google Cloud Messaging) aka “push notifications” to have fresher updates and optimized battery usage.

Leave a Comment