1) Switch back from AsyncTasks to an Executor and Futures.
2) Make the Executor operate LIFO.
3) Make the Executor thread a BACKGROUND_PRIORITY thread.
1) Refactor recipient class to support asynchronous loading operations.
2) Refactor recipient factory to simplify recipient access.
3) Consoliate everything into one recipient provider that is capable of
doing async lookups and intelligent caching.
1) Change all instances which use concatenation to build strings
with variables in them to use string formatting instead.
2) Extract all string literals from layouts and menus into strings.xml
3) Extract all string literals from code into strings.xml
1) Start breaking the UI out into Fragments.
2) Switch to Cursor loaders from managed cursors.
3) Switch to inflated menu resources.
4) Break out some basic functionality into helper classes.
The best-effort memory cleaning logic for MasterSecrets
is no longer accurate, since they are being passed through
both Binder calls as well as Intents, blurring whether an
activity is using a MasterSecret which is a reference to
shared memory in the KeyCachingService or not.