Upload
anatoliy-kaverin
View
1.106
Download
2
Tags:
Embed Size (px)
DESCRIPTION
I would like to share an experience of using the recommended Android way to synchronize your application cache. SyncAdapter is very powerful and at the same time seems to be complex. Along with features & functionality overview I've provided some leads to start using it right away with sample code.
Citation preview
DEVELOPING ANDROID CLIENT APPS VIA SYNCADAPTER
Anatoliy Kaverin
Lohika @ 2013
SESSION AGENDA
Why? SyncAdapter!? LOLWUT? The big picture Puzzles Does anybody use it? Code samples, documentation Q&A
2
IMAGINE… SIMPLE CLIENT-SERVER APP
3
SYNC CACHE: ISSUES TO CONSIDER
Are we done? Global Sync setting Bandwidth starvation
YES, queued YES, even duplicates YES, even if app is off YES, built in support
Hand-made SyncAdapter framework
Network availability Pending queue Refresh on network Periodic update
YES, manual override YES! YES! YES!
4
SYNCADAPTER!? LOLWUT?
Well, you probably use it everyday…
5
THE BIG PICTURE – BASIC FLOW
6
THE BIG PICTURE – PUZZLES
7
PREREQUISITES TO CONSIDER
Network layer separation Plain implementation
Sync status field for synced entities Usually NOOP, Created, Updated & Deleted Consider the field in UI flows
Consider partial sync For better performance to sync only local delta
8
PUZZLES – ACCOUNT (1)
Key Features Manage credentials; Safe system store; Multitenant support
Sync related Token caching and invalidation Alternative flow to login or sign in Store extra data with account
9
PUZZLES – ACCOUNT (2)
Checklist: Implement Authenticator
Implement Authentication Service
Define configuration in XML
10
PUZZLES – ACCOUNT (3)
Checklist: Register Authentication Service in
AndroidManifest
Add permissions APIs to use:
android.accounts.AccountManager to work with accounts android.accounts.Account to store credentials
11
PUZZLES – CONTENT PROVIDER (1)
Key features Heart of DAO Resource effective
Cursor, resource-effective scalability Power of Joins
Built-in ListView refresh via ContentObserver & Cursor
Sync related Acts as mediator for sync and UI layers Supports automatic delta upload sync NOTE: Can be fake one, but you’ll lose a lot of
magic 12
PUZZLES – CONTENT PROVIDER (2)
Minimal implementation based on https://github.com/novoda/SQLiteProvider
Supports all CRUD Supports DB versioning And even more…
13
PUZZLES – SYNCADAPTER (1)
Key features Plugin to Android SyncManager SyncManager manages queue of execution Adapter is executed in background thread &
when network is available Sync related
Scheduling & automated mode Respects system settings
Can be overridden by manual request Partial sync supported
Upload only local delta Any other criteria (Bundle)
14
PUZZLES – SYNCADAPTER (2)
Checklist Implement SyncAdapter class
Implement Sync Service
Define configuration xml
15
PUZZLES – SYNCADAPTER (3)
Checklist Register Sync Service in AndroidManifest
Add permissions APIs to use
android.content.ContentResolver to reach SyncManager programmatically 16
PUZZLES – SYNCADAPTER (4)
How to trigger sync? Upload delta
ContentResolver.notifyChange Be aware of cyclic calls if used in ContentProvider
Scheduling ContentResolver.addPeriodicSync
Automated ContentResolver.setSyncAutomatically
Manual ContentResolver.requestSync
Manual forced ContentResolver.requestSync Pass SYNC_EXTRAS_MANUAL in bundle 17
THE BIG PICTURE – OPTIONAL PUZZLES
18
PROS & CONS
Pros Simplify server interaction A lot of work handled by framework Resource effective – the Android way
Cons A lot of puzzles, hard to start… Lack of documentation Error handling Bugs
19
DO
ES
AN
YB
OD
Y U
SE IT
?
20
DOCUMENTATION
Official docs Great tutorial added in August ’13 http://
developer.android.com/training/sync-adapters/index.html + code sample
Stackoverflow, use tags below [android-syncadapter] [sync] + [android]
21
BONUS: CODE SAMPLES
Repo on GitHub https://github.com/springbyexample/spring-by-example Toy client-server app (both parties supplied ) Shows all puzzles implemented:
Accounts – fake one, there is no authentication Content Provider based on novoda library SyncAdapter logics All wrapping XML configuration
Built via Maven Follow README and be happy
Got questions? [email protected]
22
Q & AThanks for your attention!23