developing android client apps via syncadapter

Post on 23-Jun-2015

1.106 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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.

TRANSCRIPT

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? a.kaverin@gmail.com

22

Q & AThanks for your attention!23

top related